의문점 공부하기/📌 Java

📌 ==와 equals의 차이점은 무엇일까?

아리빠 2023. 5. 31. 10:31

프로그램을 작성하다보면 두 객체가 같은지 비교하는경우가 많다

기본 타입의 값을 비교하기 위해선 == 연산자를 사용하지만, 객체 비교를 위해 ==연산자를 사용하면 잘못된 결과가 나올 수 있다.

 

객체 비교를 위해선 equals() 메소드를 사용해야 한다

 

==연산자로 두 객체 비교하면 어떤 문제가 발생할까? 

 

    public static void main(String[] args) {

        Point a = new Point(2,3);
        Point b = new Point(2,3);
        Point c = a;

        if(a==b){ //false
            System.out.println("a==b");
        }
        if(a==c){ //true
            System.out.println("a==c");
        }
    }
}

예시를 통해 알아보자~!

 

레퍼런스 a와 b가 서로 다른 객체를 가르키므로 당연히 a와 b의 레퍼런스 값은 다르다, a==b의 값은 false

그러나 a와 c는 레퍼런스 값이 같고 동일한 객체를 가르킨다, a==c의 결과는 true가 된다

 

==연산자는 두 객체의 내용물이 같은지를 비교하는 것이 아니라, 두 레퍼런스의 값을 비교한다