class Buku {
    private final String judul;
    private final String isbn;

    public Buku(String judul, String isbn) {
        this.judul = judul;
        this.isbn = isbn;
    }
}

public class IdentitasVsNilai {
    public static void main(String[] args) {
        Buku a = new Buku("Java Dasar", "978-602-1234-01-5");
        Buku b = new Buku("Java Dasar", "978-602-1234-01-5");

        // == membandingkan referensi: apakah menunjuk objek yang sama?
        System.out.println("a == b      : " + (a == b));

        // equals default dari Object membandingkan identitas juga.
        System.out.println("a.equals(b) : " + (a.equals(b)));

        // Dua variabel menunjuk objek yang sama: keduanya true.
        Buku alias = a;
        System.out.println("a == alias  : " + (a == alias));
        System.out.println("a.equals(alias) : " + (a.equals(alias)));

        // String literal berbagi instance di string pool.
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");
        System.out.println("literal == literal : " + (s1 == s2));
        System.out.println("new String == literal : " + (s3 == s1));
        System.out.println("s3.equals(s1)      : " + s3.equals(s1));
    }
}
