Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Java에서 == 연산자와 equals() 메소드의 차이점 완벽 정리

Java에서 == 연산자와 equals() 메소드는 모두 두 변수나 객체가 같은지를 비교하는 데 사용됩니다. 하지만 두 방식은 비교하는 기준이 완전히 다르기 때문에, 그 차이를 정확히 이해하는 것이 매우 중요합니다.

아래 표는 ==equals() 메소드의 주요 차이점을 정리한 것입니다.

번호구분==equals() 메소드
1종류==는 연산자(operator)입니다.equals()는 Object 클래스에 정의된 메소드입니다.
2비교 대상참조(reference) 비교에 사용됩니다. 두 참조 변수가 동일한 메모리 위치(같은 객체)를 가리키는지 확인합니다.내용(content) 비교에 사용됩니다. 객체가 담고 있는 실제 값을 평가하여 동등성을 판단합니다.
3재정의 가능 여부== 연산자는 재정의(오버라이딩)할 수 없습니다.equals() 메소드는 별도로 정의되어 있지 않으면 Object 클래스의 기본 구현을 사용하며, 필요에 따라 재정의할 수 있습니다.

== vs equals() 예제 코드

다음 예제를 통해 두 방식의 차이를 직접 확인해 보겠습니다.

JavaTester.java

public class JavaTester {
    public static void main(String args[]) {
        String s1 = new String("TUTORIALSPOINT");
        String s2 = new String("TUTORIALSPOINT");
        // 참조 비교 - 서로 다른 객체이므로 false
        System.out.println(s1 == s2);
        // 내용 비교 - 문자열 내용이 같으므로 true
        System.out.println(s1.equals(s2));
        // int 타입 비교
        System.out.println(10 == 10);
        // char 타입 비교
        System.out.println('a' == 'a');
    }
}

실행 결과

false
true
true
true

결과 분석

s1 == s2false를 반환하는 이유는, new String()으로 생성된 두 문자열은 내용은 같지만 서로 다른 메모리 위치에 존재하는 별개의 객체이기 때문입니다. 반면 s1.equals(s2)는 문자열의 실제 내용을 비교하므로 true를 반환합니다.

기본형(primitive type)인 intchar의 경우 값 자체가 저장되므로 ==로 비교해도 원하는 결과를 얻을 수 있습니다.

정리

  • 객체의 참조(주소)를 비교할 때는 ==를 사용합니다.
  • 객체의 내용(값)을 비교할 때는 equals()를 사용합니다.
  • 특히 String과 같은 참조형 데이터를 비교할 때는 의도치 않은 버그를 피하기 위해 equals() 사용을 권장합니다.