比较Integers与==到底有什么作用?

错误的请求 :

编辑:好的,好的,我读错了。我没有将int与Integer进行比较。适当注意。

我的SCJP书说:

当==用于将原语与包装器进行比较时,包装器将被展开,并且比较将是原语与原始的比较。

因此,您会认为此代码将打印true

    Integer i1 = 1; //if this were int it'd be correct and behave as the book says.
    Integer i2 = new Integer(1);
    System.out.println(i1 == i2);

但它打印false

另外,根据我的书,这应该打印true

Integer i1 = 1000; //it does print `true` with i1 = 1000, but not i1 = 1, and one of the answers explained why.
Integer i2 = 1000;
System.out.println(i1 != i2);

不。false

是什么赋予了?

约翰·库格曼(John Kugelman):
Integer i1 = 1;
Integer i2 = new Integer(1);
System.out.println(i1 == i2);

当您为该i1分配1时,将装箱,创建一个Integer对象。然后比较将两个对象引用进行比较。引用不相等,因此比较失败。

Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1 != i2);

因为这些都是用编译时常量初始化的,所以编译器可以并且确实将它们进行内插,并使两者都指向同一Integer对象。

(请注意,我将值从1000更改为100。正如@NullUserException指出的那样,仅会插入小整数。)


这是一个非常有趣的测试。看看是否可以解决这个问题。为什么第一个程序打印true,而第二个程序打印false使用装箱和编译器时间分析的知识,您应该能够弄清楚这一点:

// Prints "true".
int i1 = 1;
Integer i2 = new Integer(i1);
System.out.println(i1 == i2);

// Prints "false".
int i1 = 0;
Integer i2 = new Integer(i1);
i1 += 1;
System.out.println(i1 == i2);

如果您了解上述内容,请尝试预测该程序的输出:

int i1 = 0;
i1 += 1;
Integer i2 = new Integer(i1);
System.out.println(i1 == i2);

(猜测之后,运行它即可查看!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

maxSwallowSize 到底有什么作用?

zpool export 到底有什么作用?

spring.cloud.stream.source 到底有什么作用?

TruncatedSVD get_params([deep]) 到底有什么作用?

`-C`标志在`scp`中到底有什么作用?

“引用”在Delphi中到底有什么作用?

gulp-release-tasks到底有什么作用?

scrollView 中的 fillViewPort 到底有什么作用?

echo $ {((2#$ 1)))到底有什么作用?

ctypes.cdll.LoadLibrary 到底有什么作用?

#define到底有什么用?

BIOS到底有什么限制?

没有其他选项的“ git update-index -g”到底有什么作用?

rx-vlan-offload和tx-vlan-offload ethtool选项到底有什么作用?

R8完全模式到底有什么作用(积极的优化)?

“与Windows一起安装”功能到底有什么作用?

这种表达语言$ {pageContext.request.contextPath}在JSP EL中到底有什么作用?

$'text'在Bash中到底有什么作用?可以在Zsh中使用吗?

JavaScript的严格模式对隐式全局声明到底有什么作用?

eclipse命令行参数“ -clean”到底有什么作用?

“ make oldconfig”在Linux内核makefile中到底有什么作用?

npm / yarn安装期间的“链接依赖项”到底有什么作用?

c下划线表达式`c_`到底有什么作用?

在初始化变量时将大括号放在变量周围到底有什么作用?

从多任务列表中“删除应用程序”到底有什么作用?

logrotate对apache日志文件到底有什么作用?(Apache 2.4-Ubuntu 14.04)

logrotate对apache日志文件到底有什么作用?(Apache 2.4-Ubuntu 14.04)

注释在编译时在Android中到底有什么作用?

http等效值“ Content-Security-Policy”到底有什么作用?