我正在使用以下代码比较两个Integer对象....为什么输出是“两个整数都不相等...”虽然我已经读过某处Integer或int将仅在-128到127的范围内相等。为什么不是128?
Integer i1 = 128;
Integer i2 = 128;
if(i1!=i2){
System.out.println("Both integer are not equal...");
}
答案 0 :(得分:1)
Java Integer
是一种引用类型,==
通常不适合比较。
但是,对于较小的数字,Java实现了与自动装箱相关的缓存机制,使==
运算符能够正常运行-128到127范围内的数字。
即,如果你这样做
Integer x = 12;
Integer y = 12;
boolean b = x==y;
b
将为true
。
对于超出此范围的数字,它将无效。如果你这样做
Integer x = 200;
Integer y = 200;
boolean b = x==y;
b
将为false
,因为这些数字不是指向同一对象的引用。
答案 1 :(得分:0)
整数是引用类型。它们与int是不同的,它们是原始类型。
==运算符,当应用于引用类型时,检查引用相等性。本质上,这意味着两个引用是==当且仅当它们引用内存中的同一对象时。 .equals()运算符(i1.equals(i2))用于检查两个对象是否具有相同的值。
但是,某些具有特定值的引用类型存在某些预先存在的对象。如果编译器识别代码中的某些常量,它将创建一个新对象来保存该常量,而不是指向该预定义对象的引用。在下面的代码中,编译器不会为i1和i2创建新对象,而是将它们都设置为包含该值的预先存在的Integer。所以i1和i2引用相同的对象,因此彼此“==”。
Integer i1 = 50;
Integer i2 = 50;
Integer i3 = new Integer(50);
Integer i4 = new Integer(50);
System.out.println("does i1==i2? " + (i1==i2));
System.out.println("does i1==i3? " + (i1==i3));
System.out.println("does i3==i4? " + (i1==i4));
将输出
does i1==i2? true
does i1==i3? false
does i3==i4? false