1
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 之间,它将比较原始值或检查引用变量是否引用同一个对象

我的问题:为什么会这样?有什么逻辑吗?这个逻辑有用吗?或者它只是一种 oracle 的方式来说明 java 与其他语言的不同之处。

4

1 回答 1

2

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

正确的

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

不,它做的完全一样。

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

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

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

为了提高性能。

有什么逻辑吗?

见 Integer.valueOf(int)

这个逻辑有用吗?

节省垃圾。

或者它只是一种 oracle 的方式来说明 java 与其他语言的不同之处。

或许,孙的想法是真的。

于 2013-07-20T21:02:58.797 回答