public class IntegerVsInt {
public static void main(String args[])
{
int a = 1;
int b = 1;
int c = a + b;
System.out.println(c);
System.out.println(a == b);
Integer x = 1;
Integer y = 1;
Integer z = x + y;
System.out.println(z);
System.out.println(x == y);
}
}
在上面的代码中,我将比较两个int和两个integer类型的对象。
比较两个int的
a == b
我希望能比较他们的价值观。
然而,当你比较两个整数
时x == y
我希望比较两个对象的地址,然后返回false。
我在两种情况下都是如此?为什么会出现这种情况?
答案 0 :(得分:6)
==正在测试整数是否是同一个对象。在java中,需要缓存某些小值,并且可以选择缓存其他值,这就是== Object引用求值为true的原因。
的摘录如果装箱的值p为真,假,字节或范围为\ u0000到\ u007f的字符,或者介于-128和127(含)之间的整数或短数,则让r1和r2为p的任意两次拳击转换的结果。始终是r1 == r2。
的情况答案 1 :(得分:3)
x == y
由于整数缓存, true
和-128
之间的值为127
。
尝试
Integer x = 130;
Integer y = 140;
现在比较并看看魔术。
如果装箱的值p为真,假,字节或范围为\ u0000到\ u007f的字符,或者介于-128和127(含)之间的整数或短数,则让r1和r2为p的任意两次拳击转换的结果。始终是r1 == r2。
的情况
<强>原因:强>
这种行为将是理想的行为,而不会造成过度的性能损失,特别是在小型设备上。可能会减少内存限制的实现。