본문 바로가기
Oracle 1z0-808 Exam

Oracle 1z0-808 Exam 2024: Question #10

by Status Code 2024. 2. 21.

Oracle 1z0-808 Exam: Question #10 해설

질문 원본 내용

Given the following code:

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder("Java");
    String s = "Java";

    if (sb.toString().equals(s.toString())) {
        System.out.println("Match 1");
    } else if (sb.equals(s)) {
        System.out.println("Match 2");
    } else {
        System.out.println("No Match");
    }
}

What is the result?

A. Match 1
B. Match 2
C. No Match
D. A NullPointerException is thrown at runtime.


질문 번역

다음은 Java의 StringStringBuilder 클래스를 사용하는 코드 예시입니다:

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder("Java");
    String s = "Java";

    if (sb.toString().equals(s.toString())) {
        System.out.println("Match 1");
    } else if (sb.equals(s)) {
        System.out.println("Match 2");
    } else {
        System.out.println("No Match");
    }
}

코드를 실행했을 때 결과는 무엇일까요?

A. Match 1
B. Match 2
C. No Match
D. 런타임에 NullPointerException이 발생합니다.

정답: A. Match 1

해설

이 코드는 StringBuilder 인스턴스인 sbString 인스턴스인 s를 비교합니다. 먼저 sb.toString()을 호출하여 StringBuilder 객체를 String 객체로 변환하고, s.toString()을 호출하여 String 객체의 문자열 값을 얻습니다. String 클래스의 toString() 메소드는 객체 자신을 반환하기 때문에 s.toString()은 단순히 s와 같습니다. 따라서 sb.toString()s (또는 s.toString())는 같은 문자열 값을 가지므로 .equals 메소드는 true를 반환하고 "Match 1"을 출력합니다.

두 번째 else if 조건에서는 StringBuilder 객체 sbString 객체 s를 직접 비교합니다. StringBuilder.equals 메소드는 오버라이드되지 않아 객체 참조의 동등성을 비교합니다. 즉, 두 객체가 메모리 내에서 같은 객체를 참조하고 있어야 true를 반환합니다. sbs는 서로 다른 객체이므로 이 비교는 false입니다.

NullPointerException은 이 코드에서 발생하지 않습니다. 모든 메소드 호출이 유효한 객체 인스턴스에 대해 수행되기 때문에 예외가 발생하지 않습니다.

결과적으로, 정답은 A이며, "Match 1"이 출력됩니다.

댓글