新手提问:
public class AutoBoxDemo3 {
public static void main(String[] args) {
Integer i1 = 200;
Integer i2 = 200;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
}
}
为什么输出的是 i1 != i2
public class AutoBoxDemo3 {
public static void main(String[] args) {
Integer i1 = 200;
Integer i2 = 200;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
}
}
为什么输出的是 i1 != i2
Integer i1 = 200;
Integer i2 = 200;
这两句话在栈内存开辟了两个了Integer实例,不过他们堆内存里头的数值是相等的。
“if (i1 == i2) ”对于对象类型来说比较的是他们的引用是否相等,因此这个程序很自然走"else"
int自动装箱,-127~128可以直接从缓存中取,int为200时创建了两个Integer对象,你使用 == 比较的是两个对象的地址,当然不等了也就是说-127~128之间的值就返回结果i1 == i2,不在这个范围就返回else,是这意思吗
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
}
}
这个程序结果是i1 == i2,所以就晕了,初学麻烦高手说详细点