我想在我的应用程序中检查Integer相等,但遇到了一个奇怪的行为。在某些时候我的应用程序正常工作,但在某些时候它失败了。所以我刚刚在这里写了一个测试代码
public class EqualityTest {
public static void main(String args[]) {
Integer a = 100;
Integer b = 100;
Integer c = 1000;
Integer d = 1000;
if (a == b) {
System.out.println("a & b are Equal");
}
else {
System.out.println("a & b are Not Equal");
}
if (c == d) {
System.out.println("c & d are Equal");
} else {
System.out.println("c & d are Not Equal");
}
}
}
输出
a & b are Equal
c & d are Not Equal
这里我的问题是为什么c和d不相等?
答案 0 :(得分:6)
Integer
使用范围为-128到127的小值的 缓存 ,因此您可以为小值(例如100)获得相同的实例。
对于此范围之外的值,将创建并返回新的Integer
实例。
答案 1 :(得分:3)
Integer是可变类,在缓存中保持-128到127个整数。所以==将适用于整数-128 <= i <= 127
每次使用此范围创建Integer时,它将返回先前创建的相同对象。
对于 Java 7 ,可以使用系统属性实现:
-Djava.lang.Integer.IntegerCache.high=<size>
答案 2 :(得分:-3)
整数是一个对象。 你应该使用equal而不是== 像
if(a.equal(b)){
...
}
答案 3 :(得分:-4)
Integer a = 100;
Integer b = 100;
Integer c = 1000;
Integer d = 1000;
if (a.equals(b)) {
System.out.println("a & b are Equal");
}
else {
System.out.println("a & b are Not Equal");
}
if (c.equals(d)) {
System.out.println("c & d are Equal");
} else {
System.out.println("c & d are Not Equal");
}
==表示他们的指针或引用相等,而不是值相等。你应该调用.equals方法