다음 Java 프로그램에서 문자열 리터럴, 명시적으로 생성한 객체, intern이 반환하는 참조를 구분하여 출력 결과를 줄 단위로 쓰시오.
public class Main {
public static void main(String[] args) {
String literal = "db";
String created = new String("db");
String pooled = created.intern();
System.out.println(literal == created);
System.out.println(literal == pooled);
System.out.println(created.equals(pooled));
System.out.print(created == pooled);
}
}모범답안
false true true false
풀이와 판단 근거
new String은 문자열 풀의 리터럴과 내용이 같아도 별도 객체를 만들므로 literal과 created의 `==`는 false다. created.intern()은 풀에 있는 `db` 참조를 반환해 literal과 pooled는 같은 객체다.
equals는 문자 내용을 비교하므로 created.equals(pooled)는 true지만, created 자체는 pooled와 다른 객체라 마지막 참조 비교는 false다.
자주 틀리는 지점
- `==`가 문자열 내용을 비교한다고 생각함
- intern이 created 객체 자체를 풀로 이동시킨다고 봄
- equals가 참조 주소를 비교한다고 오해함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.