Q. 다음 코드의 결과물은?
public class Test {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = "Hello";
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.println(str1.equals(str2));
}
}
정답
눌러서 열기
1. str1 == str2
→ false
new String()으로 생성하면 항상 새로운 객체가 힙 메모리에 생성되므로 참조값이 다르기 때문에 false
2. str1 == str3
→ true
이것이 String의 특별한 점인데, 문자열 리터럴로 생성할 경우 ("Hello" 처럼) Java는 String Pool을 사용합니다.
동일한 문자열 리터럴이 이미 String Pool에 있다면, 새로 객체를 만들지 않고 기존 객체를 재사용합니다.
따라서 str1과 str3는 같은 객체를 참조하게 되어 true
3. str1.equals(str2)
→ true
String.equals()는 객체의 내용(문자열 자체)을 비교하므로 true
반응형