728x90
반응형
SMALL
== 연산자
- 참조 비교 (Reference Comparison)
- 두 객체가 메모리상 같은 위치를 가리키는지 확인
- 기본 타입(primitive type)에서는 값 자체를 비교
// 기본 타입
int a = 5;
int b = 5;
System.out.println(a == b); // true (값 비교)
// 참조 타입
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false (다른 객체)
String str3 = "hello";
String str4 = "hello";
System.out.println(str3 == str4); // true (문자열 풀에서 같은 객체)
equals() 메서드
- 내용 비교 (Content Comparison)
- 객체의 실제 값(내용)이 같은지 확인
- Object 클래스의 메서드로, 오버라이딩해서 사용
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // true (내용이 같음)
String str3 = "hello";
String str4 = "hello";
System.out.println(str3.equals(str4)); // true (문자열 풀에서 같은 객체)
System.out.println(str1.equals(str3)); // true (equals는 단순 내용 비교)
// Object의 기본 equals()는 ==와 동일
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.equals(obj2)); // false
주요 차이점
| 구분 | == | equals() |
| 비교 대상 | 참조(주소) | 내용(값) |
| 기본 타입 | 값 비교 | 사용 불가 |
| 참조 타입 | 주소 비교 | 내용 비교 (오버라이딩 필요) |
| null 안전성 | 안전 | NullPointerException 가능 |
실전 예시
// Integer
Integer num1 = new Integer(100);
Integer num2 = new Integer(100);
System.out.println(num1 == num2); // false (참조 다름)
System.out.println(num1.equals(num2)); // true (값 같음)
// 배열
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(arr1 == arr2); // false (배열의 주소 다름)
System.out.println(arr1.equals(arr2)); // false (Object의 equals는 참조 비교)
System.out.println(Arrays.equals(arr1, arr2)); // true (배열 내용 비교)
// 사용자 정의 클래스
Person p1 = new Person("Alice", 20);
Person p2 = new Person("Alice", 20);
System.out.println(p1 == p2); // false (다른 객체)
System.out.println(p1.equals(p2)); // false (equals 오버라이드 안 했음)
728x90
반응형
LIST