包装自动装箱

时间:2013-07-20 20:57:27

标签: java wrapper

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与其他语言有何不同的方式。

1 个答案:

答案 0 :(得分:2)

  

理解部分:第7行是比较引用变量是否引用同一个对象。

正确

  

在第10行中,它比较了包装对象所持有的实际原始数据。

不,它完全一样。

  

我发现:如果值在-128到127之间,它将比较原始值或者检查引用变量是否指向同一个对象

这是Integer缓存的默认范围。对于其他整数类型和布尔值也是如此。

  

我的问题:为什么会这样?

提高表现。

  

是否涉及任何逻辑?

请参阅Integer.valueOf(int)

  

这种逻辑有用吗?

节省垃圾。

  

或者它只是一种说明java与其他语言不同的神奇方式。

也许,Sun的想法真的。