今日看java编程思想中看到了这句话,其中涉及着一些知识。
首先我们应该知道java中==比较的是两个对象的堆内存地址。
class Value {
int i;
}
public class Compare {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1==v2);
}
}
所以这个程序的输出必是false
对应标题那句话
public class Compare {
public static void main(String[] args) {
Integer n1 = 128;
Integer n2 = 128;
System.out.println(n1 == n2);
Integer n3 = 127;
Integer n4 = 127;
System.out.println(n3 == n4);
}
}
结果为false和true。原因是IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。当我们调用Integer.valueOf(int i)的时候,如果i的值时结余-128到127之间的,会直接从这个缓存中返回一个对象,否则就new一个新的Integer对象,所以当n1=n2=128时比较结果为false。