標籤:java 使用 strong io cti 代碼 javascript ar
一個字串String對象一旦被配置,其內容就是固定不可變的(immutable)。如下聲明:
String str = "windows";
這個聲明會配置一個長度為11的字串對象,您無法改變它的內容。看到下面的內容,我們別理所當然地認為就是改變一個字串對象的內容:
String str = "java";
str = "javascript";
事實上,在段代碼中有兩個字串對象,一個是"java",長度為4,一個是"javascript",長度為10。這兩個是不同的字串對象,您並不是在 "java"字串後加上"script"字串,而是令str名稱指向新的字串對象,如下所示:
原來指向此
str ----> "java"
重新指定後
str-----> "javascript"
引用新的字串對象
在Java中,使用 = 將一個字串對象指定給一個名稱,其意義為改變名稱的引用對象,原來的字串對象若沒有其它名稱來引用它,就會適時地被Java的“記憶體回收”(Garbage collection)機制回收, 如若在程式中使用下面的方式聲明,則就是指向同一個字串對象:
String str1 = "number";
String str2 = "number";
System.out.println(str1 == str2);
代碼的執行結果會顯示true。在Java中會維護一個String Pool,對於一些可共用的字串對象,會先在String Pool中尋找是否存在位元組相同的String內容,如果有就直接傳回,而不是直接建立一個新的String對象,以減少記憶體的耗用。
注意到了嗎?== 運算在Java中被用來比較兩個名稱是否指向同一對象,所以不可以用==來比較兩個字串的內容是否相同,例如:
String str1 = new String("cubic");
String str2 = new String("cubic");
System.out.println(str1 == str2);
上面會顯示false的結果,因為str1與str2是分別指向不同的字串對象,如果要比較兩個(字串)對象是否相同,您要使用equals()方法,例如:
String str1 = new String("cubic");
String str2 = new String("cubic");
System.out.println(str1.equals(str2));
這樣子結果才會顯示所想要的比較結果:true。