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

          Posted on 2011-07-21 10:24 ChunPIG 閱讀(193) 評論(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關鍵與”=“賦值的區(qū)別,以及equals關鍵與比較符=的區(qū)別。
          首先,就new與=,談點個人的認識。通過new出來的對象,通常是存在堆里面。而通過=賦值的對象通常存在常量池中。
              由此可以證明:上面代碼str1==str2的結果為false,而str2==str3結果是true。
              str1與str2的值雖然一樣,但是存放在位置不一樣,所以對象所指的地址也就不一樣。
          然后=在比較的時候,一般情況下都是比較地址。
          從而也就引出了下一個問題:
          比較符==與equals的區(qū)別。
          ==對于兩個變量則是比較值,對于引用類型變量則是兩個變量在堆中存儲的地址是否相同。
          而equals則是對兩個變量是否是對同一個對象的引用,也就是在堆中的內(nèi)容是否相同。
              由此也可證明:str1.equals(str2)的結果是true。

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

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


          網(wǎng)站導航:
           

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

          Copyright © ChunPIG

          主站蜘蛛池模板: 漾濞| 佛山市| 元朗区| 阳山县| 额济纳旗| 天水市| 泽库县| 涞水县| 淮北市| 临清市| 乐昌市| 那曲县| 西吉县| 娄烦县| 南昌县| 南通市| 额济纳旗| 河曲县| 黔南| 姚安县| 东莞市| 清丰县| 淮南市| 新和县| 随州市| 辽阳市| 金沙县| 锡林浩特市| 佛冈县| 柏乡县| 海南省| 石家庄市| 九龙坡区| 介休市| 南雄市| 甘谷县| 图片| 博客| 兴安盟| 闻喜县| 辽宁省|