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