public class WoDeGongJu_qq_qun_18 {
    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");
    }
}public class WoDeGongJu_qq_qun_19 {
    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");
    }
}兩個程序運行什麼結果?一樣嗎?為什麼?加入:
我的工具-Java[18] 群號33323986,还有12个名额
我的工具-Java[19] 群號38612890,还有17个名额
共同研究JAVA,討論問題說明:
都是140人上線的群

解决方案 »

  1.   

    两个程序都会输出System.out.println("i1 == i2"); 
    因为==是进行值运算另外,你的两个程序确定没错?
    我怎么看就是一样的
      

  2.   

    首先==是判断的地址。这点不用再说明。下面就是Integer的问题了。
    java对于Integer在-128-127之间的数据会直接数据引用。所以赋值100的两个对象其实就是一个对象。而200超出了127。这个时候java会new一个新的对象。所以在==判断的时候就会是false.
      

  3.   

    JAVA基础学的好.
    come from thinking in java .up 
    up 
    up
    you
      

  4.   

    可以参考下
    http://www.blogjava.net/zhaochengming/archive/2007/08/13/136468.html
      

  5.   

    autoboxing 、unboxing,典型问题!
    up up学习
      

  6.   

    3楼 的pizzame 说的正确,其他书上也有过的
      

  7.   

    第一个会一样,第二个不会
    因为-128到127之间的Integer是有缓存的。而其它的都会重新new一个出来