본문 바로가기

java(자바)

[java(자바)] == vs equals() _디버깅의 눈물

자바에서 ==는 '객체의 주소값'을 기준으로 비교합니다. 반면에 equals()는 '객체 그 자체의 값'을 비교합니다.

 

다음은 ==와 equals() 메소드가 서로 다른 동작을 수행하는 예시입니다.

 
String s1 = new String("Hello");
String s2 = new String("Hello");

// == 연산자: 두 개의 객체의 주소값이 다름을 반환합니다.
boolean b1 = (s1 == s2); 

// equals 메소드: 두 개의 객체의 문자열이 같음을 반환합니다.
boolean b2 = s1.equals(s2);

 

위 예시에서, s1과 s2는 각각 "Hello"라는 동일한 문자열을 가지고 있습니다. 하지만 new 연산자를 사용하여 각각 새로운 객체를 생성하였기 때문에, 두 객체의 주소값은 다릅니다.

 

따라서 == 연산자는 false를 반환합니다. 반면에 equals() 메소드는 두 객체의 문자열이 같음을 반환합니다. 즉, true를 반환합니다.

 

결과적으로, 객체의 값이 같은지 비교해야 할 때는 equals() 메소드를 사용해야 하며, 객체의 주소값이 같은지 비교해야 할 때는 == 연산자를 사용해야 합니다.