Java에서는 객체를 비교할 때 두 가지 방법을 사용할 수 있습니다: == 연산자와 equals() 메서드. 이 글에서는 이 두 방법의 차이점과 사용 예제를 살펴보겠습니다.
== 연산자와 equals() 메서드의 차이점
== 연산자: 두 객체의 참조(reference)를 비교합니다. 즉, 두 객체가 동일한 메모리 주소를 가리키고 있는지 확인합니다.
equals() 메서드: 두 객체의 내용(content)을 비교합니다. 기본적으로 Object 클래스의 equals() 메서드는 == 연산자와 동일하게 작동하지만, 많은 클래스는 이 메서드를 오버라이드하여 객체의 내용을 비교하도록 구현합니다.
예제 코드 분석
아래 코드는 == 연산자와 equals() 메서드를 사용하여 기본 자료형과 참조 자료형의 비교를 보여줍니다.
package ex04.apiObject;
class Circle {
int x = 5, y = 5;
}
public class EqualsMain {
public static void main(String[] args) {
Circle c1 = new Circle();
Circle c2 = new Circle();
// 객체 비교 (참조 비교)
if(c1 == c2) {
System.out.println("same");
} else {
System.out.println("not same!!");
}
// 기본 자료형 비교
int x = 3, y = 3;
System.out.println("기본 자료형 비교(stack 영역)");
if(x == y) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
// 참조 자료형 비교
System.out.println("참조자료형 비교");
String str1 = new String("korea");
String str2 = new String("korea");
if(str1 == str2) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
// equals() 메서드 비교
System.out.println("** equals() method 비교 **************");
if(str1.equals(str2)) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
}
}
객체 비교 (참조 비교)
Circle c1 = new Circle();
Circle c2 = new Circle();
if(c1 == c2) {
System.out.println("same");
} else {
System.out.println("not same!!");
}
여기서 c1과 c2는 서로 다른 객체이므로, == 연산자는 false를 반환하고 "not same!!"이 출력됩니다.
기본 자료형 비교
int x = 3, y = 3;
System.out.println("기본 자료형 비교(stack 영역)");
if(x == y) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
기본 자료형인 int의 경우, 값 자체를 비교하므로 x와 y가 동일한 값을 가지면 true를 반환하고 "same!!"이 출력됩니다.
참조 자료형 비교
String str1 = new String("korea");
String str2 = new String("korea");
if(str1 == str2) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
str1과 str2는 각각 다른 String 객체를 가리키므로 == 연산자는 false를 반환하고 "not same!!"이 출력됩니다.
equals() 메서드 비교
System.out.println("** equals() method 비교 **************");
if(str1.equals(str2)) {
System.out.println("same!!");
} else {
System.out.println("not same!!");
}
String 클래스의 equals() 메서드는 문자열의 내용을 비교하므로 str1과 str2가 동일한 문자열 값을 가지면 true를 반환하고 "same!!"이 출력됩니다.