JAVA/기타

[JAVA] 동일성(identity) 동등성(equality) 비교 : equals(), ==

ITtraveler 2024. 9. 5. 11:19

 

 

동일성(identity) 동등성(equality) 비교

 

 

 

동일성(identity) 동등성(equality) 비교

 

동일성(identity) 이란?

동일성은 두 객체가 메모리에서 동일한 위치를 가리키고 있는지를 나타냅니다. 

즉, 두 객체가 완전히 같은 인스턴스인지 비교하는 것입니다. 

자바에서는 == 연산자를 사용하여 동일성을 비교합니다.

 

 

동등성(equality) 이란?

동등성은 두 객체가 동일한 값을 가지고 있는지를 비교하는 것입니다. 

자바에서는 equals() 메서드를 사용하여 동등성을 비교합니다. 

equals() 메서드는 기본적으로 객체의 주소를 비교하지만, 

많은 클래스에서 이 메서드를 오버라이드하여 객체의 상태를 비교하도록 합니다.

 

 

 


 

String

// 문자열 리터럴
String str1 = "hello";
String str2 = "hello";

// 새로운 문자열 객체
String strNew1 = new String("hello");
String strNew2 = new String("hello");

 

// 동일성 비교 (Identity Comparison)
System.out.println(str1 == str2);        // true
System.out.println(str1 == strNew1);      // false
System.out.println(strNew1 == strNew2);   // false

// 동등성 비교 (Equality Comparison)
System.out.println(str1.equals(str2));        // true
System.out.println(str1.equals(strNew1));      // true
System.out.println(strNew1.equals(strNew2));   // true

 

== 연산자는 객체의 참조(메모리 주소)를 비교하고, equals() 메서드는 문자열의 값을 비교합니다.

 

 

배열

// 배열 생성
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = arr1; // arr3는 arr1과 동일한 참조를 가짐

 

// 동일성 비교 (Identity Comparison)
System.out.println(arr1 == arr2);        // false (다른 객체 참조)
System.out.println(arr1 == arr3);        // true (같은 객체 참조)

// 동등성 비교 (Equality Comparison)
System.out.println(arr1.equals(arr2));   // false (기본 Object.equals() 사용)
System.out.println(Arrays.equals(arr1, arr2));   // true (내용 비교)
System.out.println(Arrays.equals(arr1, arr3));   // true (내용 비교)

equals() 메서드는 배열의 내용을 비교하지 않습니다. 

기본적으로 Object 클래스의 equals() 메서드는 참조 비교를 수행하므로, 

배열의 내용을 비교하려면 Arrays.equals() 메서드를 사용해야 합니다.

 

 

 

ArrayList

// ArrayList 생성 및 요소 추가
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);

List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(2);
list2.add(3);

List<Integer> list3 = list1; // list3는 list1과 동일한 참조를 가짐

 

// 동일성 비교 (Identity Comparison)
System.out.println(list1 == list2);        // false (다른 객체 참조)
System.out.println(list1 == list3);        // true (같은 객체 참조)

// 동등성 비교 (Equality Comparison)
System.out.println(list1.equals(list2));   // true (내용 비교)
System.out.println(list1.equals(list3));   // true (내용 비교)

ArrayList의 equals() 메서드는 리스트의 내용을 비교하므로, 내용이 동일하면 true를 반환합니다.