상세 컨텐츠

본문 제목

자바 equals 와 hashcode

관리X 과거글

by 까먹기전에 2015. 1. 19. 21:49

본문

반응형




equals메서드

매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로

알려주는 역할을 한다.


ex) 


public boolean equals(object obj){

return (this==obj);

}


두개의 객체의 같고 다름을 equals 메서드로 비교하면 항상 false로 반환한다.


hashcode 메서드

object 클래스에 있는 hashcode 메서드를 오버라이딩하면 객체주소값을 이용해서

해쉬코드를 리턴하기 때문에 절대 중복될수없다.

단 프로그램을 종료하고 다시 실행하면 값이 달라진다.

프로그램을 종료하기전까지는 해쉬코드는 계속 유지되므로 equals 메서드를 오버라이딩 하면서 hashcode 메서드도

같이 오버라이딩하는것이 일반적이다

String str1 = new String("abc")

 String str2 = new String("abc")

를 하면 해쉬코드가 같게 나온다. 이유는 문자열의 내용이 같으면 동일한 해쉬코드를 반환하도록

해쉬코드 메서드를 오버라이딩하였기 때문에, 문자열의 내용이 같으면 해쉬코드값이 같다.

반면에 System.identityhashCode(str1 or str2) 를 하면 객체의 주소값으로 해쉬코드값을 생성하기

때문에 모든객체에 대해 항상 다른 해시코드값을 리턴하는것을 보장한다.

그래서 str1,str2 해쉬코드는 같지만 서로다른 객체라는것을 알수있다.

System.identityhashCode() 의 호출결과는 실행 할때마다 달라질수있다.








관련글 더보기