glorypang 2025. 10. 27. 19:54
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