可能是重复的问题:
Java中“==”的不一致行为?
Integer包装对象仅在值为127时共享相同实例?
我发现了Integer对象的以下 == 行为,但我无法理解它。(我很清楚应该使用equals进行这种比较,但我正在为OCPJP学习...)
简而言之,== 对于1000像预期的一样正常工作,但对于10则不然。
前面的代码片段如下:
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
它表现得像人们所期望的一样:
different objects
meaningfully equal
后者:
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
具有以下输出:
same object
meaningfully equal
有人可以解释一下为什么会发生这种情况吗?
-XX:+AggressiveOpts
选项,第一个将会像第二个一样运行,因为它增加了整数缓存的大小。 ;) - Peter Lawrey