topic★★★★★난이도 · 약 15분
String의 불변성과 비교
String은 불변(immutable) 객체. `==`는 참조 비교, `equals()`는 값 비교.
#Java#String#실기핵심
왜 배우는가
`==` vs `equals()` 함정 문제는 실기 Java 코드 추적의 최빈출 중 하나.
java
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // true (문자열 리터럴 풀)
System.out.println(s1 == s3); // false (new → 새 객체)
System.out.println(s1.equals(s3)); // true (값 비교): 같은 문자열 리터럴은 JVM이 재사용한다. 그래서 s1과 s2는 같은 주소. 하지만 `new String(...)`은 명시적으로 새 객체를 만든다.
불변성: `s1 = s1 + " world";`는 s1의 내용을 바꾸는 게 아니라 새 String 객체를 만들어 s1이 가리키게 하는 것이다. 반복문에서 성능 문제가 생기면 `StringBuilder`를 쓴다.
실기 드릴 1문항
code실기 드릴 · 코드 추적
다음 코드의 출력은?
java
public class Test {
public static void main(String[] args) {
String a = "java";
String b = "java";
String c = new String("java");
System.out.print((a == b) + ",");
System.out.print((a == c) + ",");
System.out.print(a.equals(c));
}
}