본문 바로가기
자격증/정보처리기사

[정보처리기사] 실기 23년 2회 JAVA 문제 14번 해설

by ewaterland 2025. 4. 19.

해당 문제는 JAVA의 문자열 비교 개념을 다루고 있다.

== 참조 비교 (같은 메모리 주소를 가리키는지 확인)
equals() 값 비교 (객체의 값이 동일한지 확인)

 

 

문제

public class Main {
    public static void main(String[] args) {
        String str1 = "Programming"; 
        String str2 = "Programming";
        String str3 = new String("Programming");
        
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str1.equals(str3));
        System.out.print(str2.equals(str3));
    }
}

 

더보기

[ 답 ]

true

false

true

true

 

[ 풀이 ]

1. str1 == str2
str1과 str2는 둘 다 문자열 리터럴 "Programming"을 사용해서 생성된다.

여기서 문자열 리터럴이란, "로 작성된 문자열을 말한다. 자바에서는 문자열 리터럴을 상수 풀에 저장하는데, 상수 풀은 같은 값의 문자열 리터럴은 하나만 저장하기 때문에 str1과 str2는 같은 메모리 위치를 가리킨다.
따라서 str1 == str2는 true가 출력된다.

2. str1 == str3
str3는 new String("Programming")으로 생성된 새로운 객체야. new 연산자를 사용하면 항상 새로운 메모리 공간에 객체가 생성된다.
결과적으로 str1과 str3는 같은 값 "Programming"을 가리키고 있지만, 서로 다른 메모리 주소를 가리킨다.
따라서 str1 == str3는 false가 출력된다.

3. str1.equals(str3)
equals()는 문자열의 값을 비교하는 메서드이다.
str1과 str3는 값이 동일한 "Programming"이므로 true가 출력된다.

4. str2.equals(str3)
str2와 str3도 문자열의 값이 동일하므로 true가 출력된다