public class Wrap
{
public static void main(String args[])
{
Integer a =1000;
Integer b =1000;
System.out.println(a == b); //line 7
Integer c = 10;
Integer d = 10;
System.out.println(c == d); // line 10
}
}
理解部分:在第7行中,它正在比较是否引用相同对象的引用变量。在第10行中,它比较了包装对象所持有的实际原始数据。
我找到了什么:如果值介于-128到127之间,它将比较原始值,或者检查引用变量是否指向同一个对象
我的问题:为什么会如此?有涉及的逻辑吗?这种逻辑有用吗?或者是 它只是一种说明java与其他语言有何不同的方式。
答案 0 :(得分:2)
理解部分:第7行是比较引用变量是否引用同一个对象。
正确
在第10行中,它比较了包装对象所持有的实际原始数据。
不,它完全一样。
我发现:如果值在-128到127之间,它将比较原始值或者检查引用变量是否指向同一个对象
这是Integer缓存的默认范围。对于其他整数类型和布尔值也是如此。
我的问题:为什么会这样?
提高表现。
是否涉及任何逻辑?
请参阅Integer.valueOf(int)
这种逻辑有用吗?
节省垃圾。
或者它只是一种说明java与其他语言不同的神奇方式。
也许,Sun的想法真的。