新手提问:
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

解决方案 »

  1.   

    楼主看看这个http://topic.csdn.net/u/20110306/21/68e0dac8-a1ad-4e69-986e-a6b591e810f2.html
      

  2.   

    int自动装箱,-127~128可以直接从缓存中取,int为200时创建了两个Integer对象,你使用 == 比较的是两个对象的地址,当然不等了
      

  3.   

    int是一个类型,而Integer是一个类,所以直接赋值不行
      

  4.   

    当然是不相同,因为Integer是引用类型:
    Integer i1 = 200;
    Integer i2 = 200;
    这两句话在栈内存开辟了两个了Integer实例,不过他们堆内存里头的数值是相等的。
    “if (i1 == i2) ”对于对象类型来说比较的是他们的引用是否相等,因此这个程序很自然走"else"
      

  5.   

    #2楼 得分:0回复于:2011-03-14 23:49:45
    int自动装箱,-127~128可以直接从缓存中取,int为200时创建了两个Integer对象,你使用 == 比较的是两个对象的地址,当然不等了也就是说-127~128之间的值就返回结果i1 == i2,不在这个范围就返回else,是这意思吗
      

  6.   

    public class AutoBoxDemo2 {
        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,所以就晕了,初学麻烦高手说详细点