equals()
equals() 메소드는 기본적으로 Object 클래스에 정의되어 있으며, 기본 구현에서는 ==와 같이 객체의 메모리 주소를 비교하지만, 대부분의 경우 오버라이딩을 통해 객체의 내용 비교에 사용된다.
예를 들어, String 클래스에서는 equals() 메소드가 문자열의 실제 내용을 비교하도록 오버라이딩되어 있다.
public class Main {
public static void main(String[] args) {
// 두 개의 String 객체를 new 키워드를 사용하여 생성
String str1 = new String("hello");
String str2 = new String("hello");
// 두 객체가 같은 내용을 갖는지 확인
System.out.println(str1.equals(str2)); //true (내용 비교)
}
}
==
== 연산자는 기본 데이터 타입(primitive types)에서는 실제 값을 비교하지만, 객체 타입(reference types)에서는 두 객체가 같은 메모리 위치를 가리키는지 메모리 주소를 비교한다.
예를 들어, new 키워드를 사용하여 생성된 두 객체는 동일한 내용을 갖더라도 서로 다른 메모리 주소를 가지므로 == 연산자는 false를 반환한다.
public class Main {
public static void main(String[] args) {
//두 개의 String 객체를 new 키워드를 사용하여 생성
String str1 = new String("hello");
String str2 = new String("hello");
//두 객체가 동일한 메모리 주소를 가리키는지 확인
System.out.println(str1 == str2); //false (주소 비교)
}
}
결론
equals()는 객체의 내용을 비교하여 객체가 논리적으로 같은지 판단하는 데 주로 사용되고, ==는 객체의 주소를 비교하여 두 변수가 같은 객체를 참조하는지 판단하는 데 주로 사용된다.
'Language > JAVA' 카테고리의 다른 글
[JAVA]정적 메소드에서 this를 사용할 수 없는 이유 (2) | 2024.11.03 |
---|---|
[JAVA]Runnable 인터페이스를 구현해서 스레드를 만드는 이유 (0) | 2024.09.28 |
[JAVA]예외(Exception) vs 에러(Error) (0) | 2024.09.21 |
[JAVA]currentThread() (0) | 2024.09.21 |
[JAVA]문자열 상수 풀(String Pool) (0) | 2024.09.08 |