자바에서 프로그래밍을 하다 보면 ==를 쓸 때도 있고, equals() 메서드를 쓰기도 한다.
equals()는 메서드 형태이고 ==는 연산자 형태이기에, 형태가 다르다는 사실은 알고 있을 것이다.
이 둘의 기능적 차이는 무엇일까?
바로 주소를 비교하느냐, 대상의 내용 자체를 비교하느냐이다.
== 연산자는 대상의 주소값을 비교하여 판단한다.
equals() 메서드는 대상의 내용 자체를 비교하여 판단한다.
다음의 예제를 보자.
String str1 = "hi";
String str2 = new String("hi");
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2); // false
여기에서 str1, str2의 내용 자체는 "hi"로 같지만, 주소는 다르다.
그래서 equals() 메서드로 비교하면 서로 같다고 나오지만, == 연산자로 비교하면 다르다고 나온다.
위 코드에서는 true, false로 나오게 되는 것이다.
반응형