본문 바로가기
✨ Java/etc

자바(JAVA) - equals와 '==' 차이

by 환풍 2023. 7. 20.
728x90

 

프로젝트를 하다보면 비교를 통해 값을 정해줘야하는 순간이 매우 많다.

그럴때 ==을 써보기도하고, equals 메소드를 써보기도한다. 늘 애매했던 부분이라 확실하게 알고쓰지 못해 찝찝했다.

 

== 연산자란?

== 연산자는 기본적으로 두 객체의 참조(Reference)를 비교한다.
즉, 두 변수가 동일한 객체를 가리키고 있는지를 확인한다.
만약 두 변수가 동일한 객체를 가리키고 있다면, == 연산은 true를 반환한다.
하지만 두 변수가 서로 다른 객체를 가리키고 있더라도 객체의 내용이 동일하다면, == 연산은 false를 반환한다.

 

equals() 메소드란?

equals() 메서드는 객체의 내용(값)을 비교하기 위해 사용된다.
equals() 메서드는 기본적으로 Object 클래스에 정의되어 있으며,
자식 클래스들은 이를 오버라이딩하여 자신에 맞게 재정의할 수 있다.
대부분의 자바 클래스들은 equals() 메서드를 재정의하여 객체의 내용을 비교하도록 구현한다.

 

EX) 문

list1 == list2가 false인 이유는 Java에서 객체를 비교할 때,

== 연산자는 객체의 참조(Reference)를 비교하기 때문이다.

여기서 list1과 list2는 서로 다른 객체이지만, 내부의 요소들은 동일하다.

즉, list1과 list2는 같은 값을 가지는 독립적인 두 개의 ArrayList 객체이다.

ArrayList의 clone() 메서드는 새로운 ArrayList 객체를 생성하고,

원래의 ArrayList에 있는 요소들을 복사하여 새로운 ArrayList에 넣는다.

이때, 원래의 ArrayList와 복제된 ArrayList는 서로 다른 객체가 된다.

따라서 list1 == list2는 두 객체의 참조를 비교하기 때문에 false가 반환된다.

만약 두 ArrayList가 동일한 객체인지 비교하려면 equals() 메서드를 사용해야 한다.

예를 들어, list1.equals(list2)를 호출하면 두 객체의 요소들이 같은지를 비교하게 된다.

equals() 메서드를 사용하면 두 객체의 요소들이 동일하면 true를 반환한다.

 

쉽게 정리하자면,

  • == 연산자비교하고자 하는 두 대상의 주소 값을 비교한다.
  • equals 메소드비교하고자 하는 두 대상의 값 자체를 비교한다.

 

 

반응형

댓글