Java中一個關于String對象的小筆記

          Posted on 2011-07-21 10:24 ChunPIG 閱讀(192) 評論(0)  編輯  收藏
              今天在iteye看到一個關于常量池與new 對象的問題。于是便有了這篇小筆記。
              請看代碼:
             
          public class StrTest {
              public static void main(String[] args) {
                  String str1 = new String("test");
                  String str2 = "test";
                  String str3 = "test";
                  
                  System.out.println("str1 == str2 : " + (str1 == str2));
                  System.out.println("str1.equals(str2):" + str1.equals(str2));
                  System.out.println("str2== str3 : " + (str2 == st3));
              }
          }
          輸出結果如下:
          str == str1 : false
          str.equals(str1):true
          str1 == str2 : true
          起初,咋一看覺得很詫異。后來多看了一眼便明白了。這起始是涉及到New關鍵與”=“賦值的區別,以及equals關鍵與比較符=的區別。
          首先,就new與=,談點個人的認識。通過new出來的對象,通常是存在堆里面。而通過=賦值的對象通常存在常量池中。
              由此可以證明:上面代碼str1==str2的結果為false,而str2==str3結果是true。
              str1與str2的值雖然一樣,但是存放在位置不一樣,所以對象所指的地址也就不一樣。
          然后=在比較的時候,一般情況下都是比較地址。
          從而也就引出了下一個問題:
          比較符==與equals的區別。
          ==對于兩個變量則是比較值,對于引用類型變量則是兩個變量在堆中存儲的地址是否相同。
          而equals則是對兩個變量是否是對同一個對象的引用,也就是在堆中的內容是否相同。
              由此也可證明:str1.equals(str2)的結果是true。

          這是本人作為Java菜鳥的一點點看法。歡迎各位老鳥拍磚。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 1, comments - 0, trackbacks - 0, articles - 0

          Copyright © ChunPIG

          主站蜘蛛池模板: 玉树县| 布尔津县| 房产| 曲松县| 南丰县| 浮山县| 南岸区| 清徐县| 涪陵区| 双流县| 锡林郭勒盟| 巨鹿县| 增城市| 岳阳县| 香格里拉县| 盐源县| 乐东| 日喀则市| 本溪| 吉木萨尔县| 昌宁县| 两当县| 渝北区| 肇州县| 文水县| 工布江达县| 高青县| 高邑县| 贵州省| 高碑店市| 新邵县| 阿荣旗| 竹山县| 札达县| 红桥区| 临海市| 思茅市| 刚察县| 平定县| 婺源县| 蒙城县|