Search
📁

자꾸 헷갈리는 == 과 equals 차이란?

기본 자료형과 참조 자료형에서
기본 자료형의 == 은 값을 비교해줌
참조 자료형의 equals() 는 객체의 주소값을 비교 (Object 클래스에서 상속받아서 써서)
근데 String 클래스에선 Obejct에서 상속받아서 값을 문자 비교로 다시 재정의 했어서 다르다.

== 연산자

== 연산자는 기본 자료형과 참조 자료형 모두에 사용될 수 있다.
기본 자료형의 경우, == 연산자는 값 자체를 비교. 즉, 두 값이 같은지 여부를 확인.
참조 자료형의 경우, == 연산자는 객체의 주소를 비교. 즉, 두 참조 변수가 동일한 객체를 가리키는지 여부를 확인.

equals() 메서드

equals() 메서드는 Object 클래스에서 상속받은 메서드이며, 대부분의 클래스에서 이를 재정의(override)하여 객체의 내용을 비교하는데 사용한다.
equals() 메서드는 객체의 내용을 비교하여 동등성(equality)을 판단. 두 객체가 동일한 내용을 가지고 있는지 여부를 확인.
주의할 점은, equals() 메서드를 사용하기 전에 해당 메서드를 재정의한 클래스에서 오버라이드(override)해야 올바른 결과를 얻을 수 있다.

차이점 요약

== 연산자는 기본 자료형과 참조 자료형 모두에 사용되며, 값 또는 주소를 비교.
equals() 메서드는 객체의 내용을 비교하여 동등성을 판단.

예제

String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false (주소 비교) System.out.println(str1.equals(str2)); // true (내용 비교)
Java
복사
str1str2는 각각 다른 객체이므로 == 연산자로 비교할 때는 false가 반환.
하지만 equals() 메서드로 비교할 때는 두 객체의 내용이 동일하므로 true가 반환된다.
근데 재정의 해서 쓰라고 했는데 재정의 안하고 저렇게 써도 두 객체의 내용이 동일하다고 판단해줄까?
그건 String 클래스는 자체적으로 이미 재정의 되어 있어서 그렇다.
그리고 주소로 비교한것도 String은 우선 참조 자료형이라서 그렇다.
내가 만든 객체에서 두 객체의 내용을 비교할려고 할땐 IDE 자동생성을 이용해서 equals()를 재정의해주고 hashCode()도 같이 override해주자.