재 정의된 equals와 ==의 차이는 무엇인가요

kkambbak1·2024년 2월 5일
0

Object.equals

Object 클래스의 equals() 함수는 객체의 주소를 비교

두 객체가 같은 메모리 주소를 가리키는 경우에만 true를 반환

public class Main {
    public static void main(String args[]) {
        Pal palA = new Pal("까부냥");
        Pal palB = new Pal("까부냥");
        Pal palC = PalA;
        System.out.println(palA.equals(palB)); // --> False
        System.out.println(palA.equals(palC)); // --> True
    }
    
    public static class Pal {
        private String name;
        public Pal(String name) {
            this.name = name;
        }
    }
}

palA와 palB는 같은 까부냥이라는 name을 가지고 있지만,
주소가 다르므로 false
palA와 palC는 같은 객체이므로 true를 반환

String.equals

@Override
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String) anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

String 객체에서는 Overriding 된 equals 함수를 사용

== 연산자

 == 연산자는 int,boolean과 같은 primitive type에 대해서는 값을 비교한다. reference type에 대해서는 주소값을 비교한다.

이 연산자는 재정의할 수 없으며, 객체의 내용이 아닌 참조 자체를 비교한다.

뽀인트

==는 주소값이 같은지 아닌지 비교하는 것이고, equals()연산도 내부적으로 주소값을 비교하지만, String클래스에서는 equals()를 재정의해 내용을 비교하게 되어있다.

https://lcs1245.tistory.com/entry/Java-equals-%EC%B4%9D-%EC%A0%95%EB%A6%AC-%EA%B0%92-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0-Objectsequals

profile
윤성

0개의 댓글