我比较两段代码爪哇 - 拳击整数 - 为什么它返回true,如果应该返回false
Integer x = new Integer(0), y;
y=x;
x+=0;
System.out.println(x==y); // prints false
而且
Integer x = 0, y;
y=x;
x+=0;
System.out.println(x==y); // prints true
不应同时返回false
?这不是原始变量,并且在第二个代码中,即使在添加零后,它也会打印true
。我知道拳击(整数从-128到127),但是为什么拳击在第二段代码而不是在第一段?
不,因为在'-128 - 127'范围内的Integer会被缓存。在你的第一个例子中,你明确地创建了一个新的'Integer',尽管每个'Integer'在'-128 - 127'范围内都会引用同一个对象。 – SomeJavaGuy
尽管还有其他回答说-128-127不是教条,它只是JVM的一个功能,可以在一些版本中使用-Djava.lang.Integer.IntegerCache.high属性进行调整,默认值可能与JVM到JVM,**你永远不应该依赖这种行为!**请参阅http:// stackoverflow。com/questions/15052216/how-large-is-the-integer-cache –