31 건의
PROGRAMMING 검색결과
  1. 2019.09.08 KOREAPAS

자바에서 무언가를 비교하기 위해서는 두가지 방법을 사용할 수 있습니다.

Object 클래스에 정의되어 있는 equals() method와 자바 언어에서 제공하는 '==' 연산자(operator)입니다. 

 

두가지의 차이는 

1. equals()는 method이며 '=='는 operator입니다.

2. equals()는 method이기 때문에 오버라이딩(overriding)이 가능하여 사용자의 비지니스 로직에 따라 재정의가 가능하지만 '=='는 자바 언어에서 제공하는 이항연산자(binary operator)로서 오버라이딩이 불가능합니다.

3. equals()는 Object 클래스에 정의되어 있어 객체끼리의 비교만 가능하지만 '==' 연산자는 primitive type 끼리의 비교만 가능합니다.

따라서 primitive type 비교시에는 고민하지 말고 '==' operator를 사용하면 됩니다. 

4. 고민의 여지가 생기는 부분은 객체를 비교해야 할 때입니다.  간단하게 말하자면 '==' 연산자는 객체 비교시 객체의 주소값을 비교하여 동일한 객체를 참조하고 있는지 확인하며 equals() method는 객체 내의 오버라이딩 된 equals() 기능에 따라 값을 반환합니다.

 

예를 들어 String 클래스에는 equals() 메소드는 같은 객체를 참조하고 있거나 같은 value(byte[])를 가지고 있다면 true를 반환하도록 오버라이딩되어 있습니다. 

String a = new String("a");
String b = new String("a");

예를 들어 위의 두 String 객체를 '==' 연산자를 이용해 비교한다면 결과값은 어떻게 나올까요?

위에서 '==' 연산자는 같은 주소값을 참조하고 있는 동일한 객체여야 true값을 반환한다고 하였습니다. 

네, 위의 두 String 객체는 '==' 연산자를 이용해 비교하면 false를 반환합니다. 

true값을 얻기 위해서는 String 클래스의 equals() 메소드를 사용하여야 합니다. 

( * String 객체는 보통 생성자 없이 interning 해주기 때문에 '==' 연산자를 사용하여도 비교가 가능합니다. )

 

+ 객체가 null 값인지 비교하기 위해서는 '==' operator를 사용할 수 밖에 없습니다.

그 이유로는 equals() 메소드를 실제 사용해보면 알게 될텐데 equals() 메소드를 사용하기 위해 null 객체에 접근하면  NullPointerException이 발생하기 때문입니다.