Object 클래스의 equals() 함수는 객체의 주소를 비교
두 객체가 같은 메모리 주소를 가리키는 경우에만 true를 반환
public class Main {
public static void main(String args[]) {
Pal palA = new Pal("까부냥");
Pal palB = new Pal("까부냥");
Pal palC = PalA;
System.out.println(palA.equals(palB)); // --> False
System.out.println(palA.equals(palC)); // --> True
}
public static class Pal {
private String name;
public Pal(String name) {
this.name = name;
}
}
}
palA와 palB는 같은 까부냥이라는 name을 가지고 있지만,
주소가 다르므로 false
palA와 palC는 같은 객체이므로 true를 반환
@Override
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
String 객체에서는 Overriding 된 equals 함수를 사용
== 연산자는 int,boolean과 같은 primitive type에 대해서는 값을 비교한다. reference type에 대해서는 주소값을 비교한다.
이 연산자는 재정의할 수 없으며, 객체의 내용이 아닌 참조 자체를 비교한다.
==는 주소값이 같은지 아닌지 비교하는 것이고, equals()연산도 내부적으로 주소값을 비교하지만, String클래스에서는 equals()를 재정의해 내용을 비교하게 되어있다.