728x90
01. 값 타입의 비교
값 타입
인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 한다.
변수 a와 변수 b의 값이 같으므로 true가 나온다.
address1과 address2의 값은 같지만 참조가 다르므로 false가 나온다.
public class ValueMain {
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println("a == b : " + (a == b));
Address address1 = new Address("city", "street", "100");
Address address2 = new Address("city", "street", "100");
System.out.println("address1 == address2 : " + (address1 == address2));
}
}
02. 동일성(identity) 비교와 동등성(equivalence) 비교
동일성 비교
인스턴스의 참조 값을 비교한다.==
를 사용한다.
동등성 비교
인스턴스의 값을 비교한다.equals()
를 사용한다.
값 타입은?a.equals(b)
를 사용해서 동등성 비교를 해야한다.
값 타입의 equals()
메소드를 적절하게 재정의 해야한다. (주로 모든 필드에 사용하는 것을 권장한다.)
예시 코드equals()
는 제공해주는 것을 사용한다. hashCode()
도 같이 정의하는 것을 권장한다. Address 클래스에 다음과 같이 작성한다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
return Objects.equals(city, address.city)
&& Objects.equals(street, address.street)
&& Objects.equals(zipcode, address.zipcode);
}
public class ValueMain {
public static void main(String [] args) {
int a = 10;
int b = 10;
System.out.println("a == b : " + (a == b));
Address address1 = new Address("city", "street", "100");
Address address2 = new Address("city", "street", "100");
System.out.println("address1 == address2 : " + (address1 == address2));
System.out.println("address1 equals address2 : " + (address1.equals(address2)));
}
}
728x90
'JPA' 카테고리의 다른 글
객체지향 쿼리 언어1 - 기본 문법과 쿼리 API (0) | 2024.01.18 |
---|---|
값 타입 컬렉션 (0) | 2024.01.18 |
값 타입과 불변 객체 (2) | 2024.01.15 |
임베디드 타입 (0) | 2024.01.15 |
기본값 타입 (2) | 2024.01.14 |