차이점
== 연산자
- 두 객체의 레퍼런스(참조값) 비교
- 객체가 메모리 내에서 동일한 위치를 참조하는지 확인
equals 메서드
- 두 객체의 내용을 비교
- 내부 상태를 기반으로 비교 수행
- 객체의 논리적 동등성을 확인하는데 사용
class Main {
public static void main(String[] args) {
// 사과 객체 생성
사과 사과1 = new 사과("애플");
사과 사과2 = new 사과("애플");
// 사과 객체 비교
System.out.println("사과1 == 사과2 : " + (사과1 == 사과2));
System.out.println("사과1.equals(사과2) : " + (사과1.equals(사과2)));
// 정수 객체 생성
Integer i1 = new Integer(10);
Integer i2 = new Integer(10);
// 정수 객체 비교
System.out.println("i1 == i2 : " + (i1 == i2));
System.out.println("i1.equals(i2) : " + i1.equals(i2));
// 문자열 객체 생성
String str1 = "안녕";
String str2 = "안녕"; // 문자열 상수를 참조하는 경우
// 문자열 객체 비교
System.out.println("str1 == str2 : " + (str1 == str2));
System.out.println("str1.equals(str2) : " + str1.equals(str2));
// 문자열에 문자열을 추가하여 새로운 문자열 생성
str1 += "하이";
// 문자열 객체 비교
System.out.println("str1 == str2 : " + (str1 == str2));
// 문자열 객체 생성
String str3 = new String("안녕");
String str4 = new String("안녕");
// 문자열에 문자열을 추가하여 새로운 문자열 생성
str4 += "하이";
// 문자열 객체 비교
System.out.println("str3 == str4 : " + (str3 == str4));
System.out.println("str3.equals(str4) : " + str3.equals(str4));
}
}
class 사과 {
String 이름;
사과(String 이름) {
this.이름 = 이름;
}
// equals 메서드 재정의
@Override public boolean equals(Object o) {
if ( o instanceof 사과 ) { // 객체가 사과의 인스턴스인지 확인
사과 비교대상 = (사과)o; // 비교 대상 객체를 사과 객체로 캐스팅
if ( this.이름.equals(비교대상.이름) ) { // 사과의 이름이 같으면 true 반환
return true;
}
}
return false; // 사과의 이름이 다르면 false 반환
}
}