[3.StringClass][str.concat] concat질문 (p.8, p.15)
280
작성한 질문수 8
[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을 출력해보시면 원래의 문자열 그대로 출력되는 것을 보실 수 있습니다 🙂
감사합니다.
문제와 풀이
0
27
1
섹션 2 퀴즈 9번
0
34
2
강의노트 내용이 이해가 되지 않아서 문의드립니다.
0
48
1
중급1편, 래퍼클래스 문제와풀이2 로또제너레이터 질문
0
68
1
setVlaue질문
0
95
3
안녕하세요 코딩테스트와 병행하고 싶어서 질문드립니다.
0
95
1
findValue의 파라메터까지 래퍼클래스 배열인 이유가 있을까요?
0
76
1
아래 글처럼 toString() 강의부터 화면이 안보여요
0
99
2
TemporalAdjusters의 lastDayOfNextMonth(), lastDayOfNextYear() 메서드 지원 안함
0
84
2
오타 제보도 되나요?
0
91
2
지역 클래스 예제3 지역변수 질문
0
69
2
래퍼클래스 박싱 출력
0
60
1
자바 equals() 메소드에 대한 물리적 동일성, 논리적 동등성 질문
0
107
3
강의록 오타 제보
0
69
2
자바의 기본 클래스들에 관하여
0
71
1
실무에서 중첩(내부) 클래스 사용하나요?
0
81
1
지역 클래스 - 지역 변수 캡처3
0
57
1
12:30 의 newClassGrade 질문이 있습니다.
0
57
1
날짜와 시간 문제풀이가 막히는데
0
100
2
내부 클래스의 바깥 클래스 참조
0
68
1
스트링 풀, new String()
0
105
3
정적 중첩 클래스 사용 이유
0
97
1
status.getCode() 대신 status.code 사용
1
82
1
메서드의 지역변수명과 내부클래스의 멤버메서드에서의 지역변수명의 중복관련
0
75
1






