문자열이 불변이므로 다음과 같이 작성하여 str에서 영숫자가 아닌 모든 문자를 제거해야합니다. 나는 이해할 수 없었다 무엇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 개체에 다시 할당하여 작동합니까? 내 이해를 기반으로, 그것은 일하지 말았어야 이후 불변의 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);
}
다음 이미지에서 보았 듯이 string1과 string2는 힙의 동일한 String 개체를 가리 킵니다. 이것이 내부적으로 어떻게 작동하는지 분명히 할 수 있습니까?
글쎄, 단순히 참조 ('str')를 새로 생성 된'String' 객체로 바꾸기 만하면됩니다. 나에게 꽤 기초적인 것 같다. – GGrec
'String str'은 문자열에 대한 ** 참조 **입니다. –