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)
byte, short, int, long, float, double, boolean, char참조형 변수 (Reference Type)
Book, int[], String …<aside> 💡
참고 - String
String은 사실 클래스다. 따라서 참조형이다. 그런데 기본형처럼 문자 값을 바로 대입할 수 있다.
문자는 매우 자주 다루기 때문에 자바에서 특별하게 편의 기능을 제공한다.
</aside>
== 연산자는 기본 타입에서는 값을 비교하고, 참조 타입에서는 위치 주소(참조값)을 비교한다.
== 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인 → 완전히 똑같은 것 (물리적으로 같은 메모리에 있음)equals() 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인한 줄 요약 : 동등성(Equality) - 내용 비교 / 동일성(Identity) - 메모리 주소 비교
그럼 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 가 출력된다!