由於字符串是不可變的,所以我必須按如下方式編寫以從str中刪除所有非alphanemeric。Java String如何在內部刪除所有非數字作品?
void test(String str) {
str = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +str);
}
我不明白的是,如何通過重新分配給str來工作?由於字符串是不可變的,我明白,如果我將它分配給一個新的字符串newString,他們指出兩個不同的對象,str和newString。 它,原始字符串指向str和修改後的字符串指向具有兩個不同的不可變字符串的newStr。這對我來說很好。
void test(String str) {
String newStr = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +newStr);
}
但是,如何通過重新分配到相同的str對象來工作?根據我的理解,它不應該工作,因爲immutable str不能修改,所以修改後的str的結果不能存儲在不可變的str中。
void test(String str) {
// this shouldn't be working based on my understanding. But it works. Why?
str = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +str);
}
正如你所看到下面的圖片,字符串1和字符串都指向堆中同一個String對象。你能否澄清這是如何在內部工作的?
那麼它只是簡單地將引用('str')切換到新創建的'String'對象。對我來說似乎很基本。 – GGrec
'String str'是一個String引用**。 –