Strong Root


문제


출력 결과는 무엇일까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Test {
 
    public static void main(String[] args) {
        User a = new User("CGun"29);
        User b = new User("CGun"29);
        User c = a;
        
        System.out.println(a == b);
        System.out.println(a == c);
        System.out.println(a.equals(b));
    }
 
    public static class User {
        private String name;
        private int age;
        
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
}
cs











정답







해설


위 소스코드를 자세히 보시면 User 클래스 안에 equals() 메서드가 없습니다.


근데 왜 컴파일 에러가 안날까요?



Java 에서 모든 클래스들은 기본적으로 Object 클래스를 상속받습니다.


extends Object 가 생략되었을 뿐입니다.


그리고 이 Object 클래스 안에 equals() 메서드가 존재하고 있으며, 소스코드는 아래와 같습니다.


네. 따라서 a.equals(b) 는  a == b 와 완전히 같습니다.


String.equals() 문제에 익숙한 분들을 향한 함정 문제였습니다.






참고


String.equals()







출처


GC - java.lang.Object

GC - java.lang.String