我們通過幾個例子來看一下String使用要注意的地方
1.String s = "a"+"b"+"c"+"d"+"e"+"f"+"g";這條語句創建了幾個對象?
我們看到這段話的第一反應就是a,b,c,d,e,f,g都是基本數據類型,沒有創建對象,於是"a"+"b"="ab",這樣創建了一個對象
然後"ab"+"c"="abc"這又創建了一個對象,就這樣一個個實現,String s 中s是在堆棧中沒有創建對象,所以一共創建了
6個對象。但是,這樣理解到底對不對呢?顯然結果是不對的,因爲在String的內部結構中是通過StringBuilder實現的,
所以,並沒有生成“ab”,"abc"這些對象,而是直接將他們連接的結果提取出來變成“abcdefg”,所以其實上面那句話就相
當於String s = "abcdefg",所以當JVM執行的時候只創建了1個對象。
值得注意的是String s = new String("abc");它創建了兩個對象,因爲"abc"本身與經過new創建出來的不是同一個對象。
改一下,如果問題改成下面這樣
String A,B,C,D;
A="a";
B="b";
C="c";
D="d";
A=A+B;
A=A+C+D;
這時創建了幾個對象呢?
A=“a”這裏創建了一個對象一個應用,B,C,D也是如此,然後A=A+B創建了一個,A=A+C+D;創建了一個,所以這裏創建了
6個對象
2.String s = "abcdefg";System.out.println(s.subString(2,5));這句執行結果是什麼呢?
好,我們如果不小心,直接就說從2開始,到5結束,所以是cdef,但是,在String中
subString是前包括後不包括的,也就是說這裏不包括5,所以正確結果應該是cde。