可能重复:
整数包装器对象仅在值127内共享相同的实例?
我从Khalid Mughal SCJP复制了以下程序片段,但我无法
理解输出.
public class RQ200_60 {
public static void main(String[] args) {
Integer i = -10;
Integer j = -10;
System.out.print(i==j); // output: true -- why true?
System.out.print(i.equals(j)); // output: true
Integer n = 128;
Integer m = 128;
System.out.print(n==m); // output: false
System.out.print(n.equals(m)); // output: true
}
}
Run Code Online (Sandbox Code Playgroud)
上面的程序为第一个print语句提供了true,但它应该给出false,因为它是与==关系运算符的引用比较.但第三次打印给出了错误,我不明白这种不一致.
非常感谢您的解释!
Pri*_*ley 34
在第一种情况下,两个物体i和j被指向同一高速缓存的对象.默认情况下,-128和127之间的范围将缓存为IntegerObject.我们可以使用增加范围JVM arguments
use*_*300 12
关于缓存的答案是正确的.但是,如果你去......
Integer i = new Integer(10);
Integer j = new Integer(10);
Run Code Online (Sandbox Code Playgroud)
...然后你避免缓存,结果将是你所期望的.
可以为表示接近0的值的高速缓存整数对象.(实现的规范可能会告诉您一些细节).这可能是为了节省内存(接近0的值是常见的,并且它会浪费大量内存来为具有相同值的每个变量创建一个新对象).
==检查两件事是否是同一个对象; 对于具有相同值的任何两个给定变量,您可能有也可能没有相同的Integer对象.你不应该检查,==因为你不应该关心它是否是同一个对象; 重要的是它的价值Integer,而不是它的身份.
| 归档时间: |
|
| 查看次数: |
1199 次 |
| 最近记录: |