==과 equals 차이

허세진·2026년 1월 20일

backend

목록 보기
6/20

== 연산자

== 연산자는 Primitive type은 값을 비교하고 Reference type은 주소를 비교한다.

ex)

int a = 10;
int b = 10;
a == b // true

String s1 = new String("abc");
String s2 = new String("abc");
s1 == s2 // false

첫 번째의 경우에는 primitive type이니까 값을 비교해서 둘 다 10이니까 true이고,
두 번째의 경우에는 reference type이니까 참조값을 비교하는데 s1, s2각각 객체를 생성했기 때문에 참조값이 다르니까 false가 나온다.

equals 메서드

equals 메서드는 Object 클래스에 정의된 기본 구현에서는 ==와 동일하게 참조를 비교하지만 오버라이딩 했을 때는 두 객체의 내용이 논리적으로 같은지를 비교한다.

ex) 기본 equals

class Person {
    String name;

    Person(String name) { this.name = name; }
}

Person p1 = new Person("sejin");
Person p2 = new Person("sejin");
     
p1.equals(p2)   

위 코드의 경우 equals의 결과는 equals메서드를 오버라이딩 하지 않고 사용했으므로 값이 아니라 ==와 같이 참조값을 비교한다. 그래서 false가 나온다.

ex) 오버라이딩 equals

String s1 = new String("sejin");
String s2 = new String("sejin");
     
s1.equals(s2)  

위 코드의 경우 String은 equals메서드를 오버라이딩해서 사용하므로 참조값이 아니라 논리적인 값을 비교한다. 그래서 true가 나오게 된다.

컬렉션, Wrapper 클래스 등이 equals 메서드를 오버라이딩한다.

profile
로그를 파고드는 시간을 즐기는 백엔드 개발자, 허세진입니다.

0개의 댓글