public class Book {

    private String name;
    private String author;

    public Book(String name, String author) {
        this.name = name;
        this.author = author;
    }
}
public class Main {

    public static void main(String[] args) {
        int a = 1;
        int b = 1;
        int c = 2;

        Book bookA = new Book("소년이온다", "한강");
        Book bookB = new Book("소년이온다", "한강");
        Book bookC = new Book("채식주의자", "한강");
    }
}

문제 상황

public class Main {

    public static void main(String[] args) {
		    int a = 1;
        int b = 1;
        int c = 2;

        Book bookA = new Book("소년이온다", "한강");
        Book bookB = new Book("소년이온다", "한강");
        Book bookC = new Book("채식주의자", "한강");

        boolean ret = (bookA == bookB);
        System.out.println("ret = " + ret); // false 출력
    }
}

비교연산자 == 를 사용해서 비교하면 같은 책이지만 다른 책이라고 false 가 출력됩니다.

🤔? Book은 참조형 타입이기 때문에 == 비교 시 참조값을 비교한다!

Primitive Type(기본형) 과 Reference Type(참조형)

image.png

== 연산자는 기본 타입에서는 값을 비교하고, 참조 타입에서는 위치 주소(참조값)을 비교한다.

동등성과 동일성

한 줄 요약 : 동등성(Equality) - 내용 비교 / 동일성(Identity) - 메모리 주소 비교

문제 상황 - equals() 사용

그럼 equals() 를 사용하면 두 객체의 내용이 동등한지 알 수 있겠다!

public class Main {

    public static void main(String[] args) {
        Book bookA = new Book("소년이온다", "한강");
        Book bookB = new Book("소년이온다", "한강");
        Book bookC = new Book("채식주의자", "한강");

        boolean ret = bookA.equals(bookB);
        System.out.println("ret = " + ret); // false 출력
    }
}

→ false 가 출력된다!