두 메서드에 어떤 차이가 존재하는지
알아보도록 하겠습니다.
Equals()
equals() 메서드의 설명과 내부 로직은 다음과 같습니다.
설명
Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.
내부 로직
🔎 equals()메소드를 비교하는 대상이 null인 경우
간단한 실험을 통해 알아보도록 하겠습니다.
실험 결과 equals() 메소드는 null-safe하지 않다는 사실이 검증되었습니다.
Object.equals()
Object.equals() 메서드의 설명과 내부 로직은 다음과 같습니다.
설명
Returns true if the arguments are equal to each other and false otherwise. Consequently, if both arguments are null, true is returned. Otherwise, if the first argument is not null, equality is determined by calling the equals method of the first argument with the second argument of this method. Otherwise, false is returned.
해석은 다음과 같습니다.
두 인자가 서로 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 따라서 두 인자가 모두 null이면 true를 반환합니다. 그렇지 않고 첫 번째 인자가 null이 아니면, 첫 번째 인자의 equals 메서드를 호출하여 두 번째 인자와의 동등성을 판단합니다. 그 외의 경우에는 false를 반환합니다.
설명에서 알 수 있듯이 Object.equals()는 null-safe합니다.
내부 로직
equals() 메서드에 파라미터로 들어오는 값인 Object a, Object b 둘다 @Nullable(null 이 전달될 수 있다.)이 붙어있다.
메서드를 통해서도 null-safe하다는 사실을 알 수 있다.
🔎 Object.equals() 메서드가 정말 null-safe한가?
간단한 실험을 통해서 알아보도록 하겠습니다.
실험 결과 Objects.equals() 메소드는 null-safe하다는 사실이 입증되었습니다.
결론
두 메서드의 차이점은 null-safe의 여부로 판단할 수 있습니다.
equals() 메서드는 null-safe하지 않고, Object.equals()메서드는 null-safe합니다.
앞으로 비교할때, null-safe한 Object.equals()를 사용하고자 합니다.
'Java' 카테고리의 다른 글
[Effective Java] 생성자 대신 팩터리 메서드를 고려하라 (0) | 2024.12.11 |
---|---|
자바 메모리 구조 (0) | 2024.10.02 |
Object.equals() 메서드가 정말 null-safe한가? (0) | 2024.09.25 |
equals()메소드를 비교하는 대상이 null인 경우 (0) | 2024.09.25 |
🔎 synchronized는 정말 동기화를 해주는가? (0) | 2024.07.19 |