心有多大舞臺便有多大

          Embrace changes, pursue excellence, share niceness.

          String,簡單又復(fù)雜


          String a = "abc";
          String b = "abc";
          Assert.assertTrue(a == b);
          String c = "abcdefg";
          String d = c.substring(0, 3);
          Assert.assertFalse(a == d);
          a == b這個比較好理解,因為在編譯的時候會產(chǎn)生一個靜態(tài)對象“abc”, 執(zhí)行a = "abc"和b = "abc"的時候,只是把這個靜態(tài)對象賦給了a和b,所以兩個對象的引用相同,a==b
          但是,d的值為"abc"字符串,為什么jvm不把靜態(tài)的"abc"的引用賦給d對象呢?
          我的理解是:String a = "abc"; String b = "abc";這兩行代碼是在解釋執(zhí)行之前編譯成字節(jié)碼的時候,"abc"就放在常量池中了,所以在執(zhí)行的時候a和b指向同一個引用,而String d = c.substring(0, 3);是在執(zhí)行的時候才給d對象賦值"abc",所以這個"abc"應(yīng)該是放在堆中.
          還是想的不明白.

          posted on 2008-04-14 11:26 pony 閱讀(312) 評論(1)  編輯  收藏 所屬分類: Java

          評論

          # re: String,簡單又復(fù)雜[未登錄] 2008-04-15 15:14 pony

          今天看String的源碼,發(fā)現(xiàn)有個方法:format(String format, Object ... args)
          這個方法挺不錯!呵呵
          一般我們要打印一個提示信息的話,可能是:
          System.out.println("test1" + var1 + "test2" + var2);
          而用這個方法的話,就變?yōu)?
          System.out.println(String.format("test1 %s test2 %s", var1, var2));
          這對c程序員應(yīng)該是很熟悉了!  回復(fù)  更多評論   

          主站蜘蛛池模板: 莆田市| 彰化市| 华安县| 藁城市| 吴江市| 莒南县| 余姚市| 凤山市| 龙南县| 神池县| 长垣县| 巧家县| 太谷县| 阜南县| 施秉县| 泽普县| 乡宁县| 花垣县| 易门县| 昌都县| 安康市| 黔江区| 花莲县| 精河县| 加查县| 华宁县| 固始县| 湘潭市| 九江市| 阿拉善盟| SHOW| 垣曲县| 龙州县| 任丘市| 崇文区| 鲁山县| 延边| 巴彦淖尔市| 石林| 泰来县| 松溪县|