# Table of Contents

# 객체 비교하기

Java 에서는 데이터가 원시타입이냐 참조타입이냐에 따라 비교하는 방식이 다르다.

# 원시 타입 비교하기

Java에서 원시 타입을 비교할 때는 ==을 사용한다.

int a = 10;
int b = 10;
int c = 11;

System.out.println(a == b);     // true
System.out.println(a == c);     // false

# 참조 타입 비교하기

참조 타입을 비교할 때 ==를 사용하면 객체의 주소값을 비교한다. 객체의 주소값이 같으면 두 객체가 동일성(Identity)를 갖는다고 한다.

Person p1 = new Person("Paul");
Person p2 = p1;
Person p3 = new Person("Paul");

System.out.println(p1 == p2);   // true
System.out.println(p1 == p3);   // false

객체의 속성값을 비교할 때는 Object클래스의 equals()메소드를 사용한다.

Person p1 = new Person("Paul");
Person p2 = new Person("Monica");
Person p3 = p1;
Person p4 = new Person("Paul");

System.out.println(p1.equals(p2));  // false
System.out.println(p1.equals(p3));  // true
System.out.println(p1.equals(p4));  // true

다만 클래스에서 equals()를 직접 오버라이드 해야한다.

public class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof Person) {
            Person _person = (Person) o;
            return this.name == _person.name;
        } else {
            return false;
        }
    }
}

객체의 속성값이 같으면 두 객체가 동등성(Equality)를 갖는다고 한다.