작성
·
230
1
[p.8 / str.concat 오류 이유 -> 불변]
하기 코드의 오류가 발생한 이유는 str.concat(" java")를 한 내용을 String타입의 변수로 담아주지 않았기 때문입니다.
package lang.string.immutable;
public class StringImmutable1 {
public static void main(String[] args) {
String str = "hello";
str.concat(" java");
System.out.println("str = " + str);
}
}
그에 비해 반면, p.15의 concat부분이 이해가 되지 않습니다.
package lang.string.method;
public class StringChangeMain1 {
public static void main(String[] args) {
String str = "Hello, Java! Welcome to Java";
System.out.println("인덱스 7부터의 부분 문자열: " + str.substring(7));
System.out.println("인덱스 7부터 12까지의 부분 문자열: " + str.substring(7,
12));
System.out.println("문자열 결합: " + str.concat("!!!"));
System.out.println("'Java'를 'World'로 대체: " + str.replace("Java",
"World"));
System.out.println("첫 번째 'Java'를 'World'으로 대체: " +
str.replaceFirst("Java", "World"));
}
}
상기에서 str.concat을 한것은 어떠한 String변수에도 담기지 않았습니다.
그럼에도 불구하고, str과 !!!가 합쳐져서 나온것을 볼 수 있습니다. 불변의 String 객체의 내용이 변수에 담지 않았음에도 불구하고 합쳐져서 나오는 이유는 무엇인가요? 궁금합니다!!
답변 1
1
안녕하세요. 개화동과자사장님, 공식 서포터즈 y2gcoder입니다.
불변객체는 연산결과를 새로운 객체로 반환한다는 것을 기억하시면 차이를 이해하시기 쉬우실 것 같습니다!
말씀해주신 p.8 에서는 str.concat()
의 결과를 출력하지 않고, str
객체를 출력하고 있습니다. 불변 객체의 이러한 연산 메서드의 특징 중 하나는 대상 객체에는 영향을 주지 않는다는 것입니다. 그래서 대상 객체인 str
을 출력했기 때문에 " java" 가 결합되지 않은 "hello"가 출력된 것입니다!
반면 p.15에서는 str.concat() 를 그대로 출력에 사용하고 있습니다. str.concat()의 반환 타입은 연산한 결과물(문자열, 새로운 String 객체)이기 때문에 "!!!"가 붙은 문자열이 출력되고 있습니다. 하지만 이 때도 str
을 출력해보시면 원래의 문자열 그대로 출력되는 것을 보실 수 있습니다 🙂
감사합니다.
아 그렇네요 빠르게 답변주셔서 감사드립니다. 오늘도 좋은 하루 보내세요 !! 😊😊😊😊