隨筆-48  評論-26  文章-0  trackbacks-0
            先看代碼再解釋。
           
          public class Test {
              
          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");
                  }

                  Integer i3 
          = 200;
                  Integer i4 
          = 200;
                  
          if (i3 == i4) {
                      System.out.println(
          "i3==i4");
                  } 
          else {
                      System.out.println(
          "i3!=i4");
                  }
              }
          }

          /**
          *  打印結果
          *  i1==i2;
          *  i3!=i4;
          */
           

          “==”就是比較引用,沒有重載過,而由于-128至127內的Interger都是同一個對象引用,

            所以第一個比較式true 之外的Interger 則不是同一個對象,所以比較為false。


            重載的應該是equals()方法,所以如果用equals來比較應該都為true。

            在JDK源碼中Integer類有一個內部類IntegerCache,它默認創建了一個-128~127的Integer對象數組。
            只要比較的是在這256個數內,就直接在對象池里查找并返回該對象。
            這是Java處于性能的考慮,目的是節省內存。
            至于范圍之外的,不同的引用就不相等了。

          posted on 2009-09-26 14:14 Worker 閱讀(198) 評論(0)  編輯  收藏 所屬分類: J2SE/J2EE

          主站蜘蛛池模板: 湟中县| 河南省| 临桂县| 凯里市| 定南县| 天门市| 类乌齐县| 梁河县| 灵石县| 多伦县| 且末县| 浪卡子县| 开平市| 玉山县| 游戏| 登封市| 忻州市| 钟山县| 满洲里市| 阿拉尔市| 缙云县| 乌审旗| 潜江市| 陵水| 苏州市| 丰原市| 扶余县| 诏安县| 体育| 广西| 延寿县| 彭泽县| 阳朔县| 自贡市| 呼图壁县| 鄂尔多斯市| 虞城县| 大安市| 临西县| 铁岭县| 伊宁市|