由于字符串是不可变的,所以我必须按如下方式编写以从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引用**。 –