반응형
1 . equals()
: 자신과(this) 매개변수로 전달 받은 객체(obj)를 동일한지 비교
true or false 를 반환
동일 객체와 동등 객체
동일 객체 : 주소가 동일한 인스턴스
동등 객체 : 주소는 다르더라도 필드 값이 동일한 객체
= > equals() 기본 기능은 동일 객체를 판단함. 동등 객체를 판단해야 하는 경우 equals()를 오버라이딩하여 확인!
equals() 동일 객체 예시
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("두 인스턴스의 == 연산 비교 : " + (book1 == book2));
System.out.println("두 인스턴스의 equals() 비교 : " + (book1.equals(book2)));
출력 결과
두 인스턴스의 == 연산 비교 : false
두 인스턴스의 equals() 비교 : false
=> 값은 같아도 별도의 인스턴스여서 주소값은 다르게 나오기 때문에 false
equals() 오버라이딩
우클릭 -> soure -> Generate hashCode() and equals() 클릭(자동완성)
@Override
public boolean equals(Object obj) {
동등객체 판단을 위한 메소드
두 인스턴스의 주소가 같은거나,
전달 받은 객체의 값이 null이거나,
this와 obj의 클래스가 같지 않으면
서로 다른 필드 값을 가지고 있기 때문에 비교할 필요가 없음
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
전달 받은 레퍼런스 변수를 Book 타입으로 형변환하여 각 필드별로 비교 하기
기본 자료형인 int는 바로 값 비교 가능/ String은 Objects.equals로 비교해야 함
Book other = (Book) obj;
return Objects.equals(author, other.author) && number == other.number && price == other.price
&& Objects.equals(title, other.title);
}
오버라이딩 후 출력 결과
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("두 인스턴스의 == 연산 비교 : " + (book1 == book2));
System.out.println("두 인스턴스의 equals() 비교 : " + (book1.equals(book2)));
출력 결과
두 인스턴스의 == 연산 비교 : false
두 인스턴스의 equals() 비교 : true
2 . hachCode()
: 객체의 해시코드를 반환하는 메서드
Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
객체마다 다른 값을 반환하기 때문에 객체의 지문이라고도 함
hashCode()와 equals()
: equals() 메소드를 재정의 하는 경우 반드시 hashCode() 메소드도 재정의(오버라이딩) 해야 함.
equals() 결과가 true인 두 객체의 해시코드는 같아야 하기 때문(중요!!)
재정의 전 hashCode() 예시
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("book1의 hashCode : " + book1.hashCode());
System.out.println("book2의 hashCode : " + book2.hashCode());
출력 결과
book1의 hashCode : 81009902
book2의 hashCode : 57748372
hashCode() 오버라이딩
@Override
public int hashCode() {
return Objects.hash(author, number, price, title);
}
오버라이딩 후 출력 결과
Book book1 = new Book(1, "홍길동전", "허균", 50000);
Book book2 = new Book(1, "홍길동전", "허균", 50000);
System.out.println("book1의 hashCode : " + book1.hashCode());
System.out.println("book2의 hashCode : " + book2.hashCode());
출력 결과
book1의 hashCode : 2010083375
book2의 hashCode : 2010083375
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바/Java] String 클래스의 hashCode()와 equals() (0) | 2022.08.29 |
---|---|
[자바/Java] String 클래스 : 자주 사용되는 메소드 (0) | 2022.08.29 |
[자바 Java] API (0) | 2022.08.29 |
[자바JAVA] 추상클래스와 인터페이스 (0) | 2022.07.14 |
[자바JAVA] 다형성(동적바인딩, 클래스형변환) (0) | 2022.07.14 |