hashCode()
객체의 지문
이라고도 함. 객체의 주소
를 int로 변환해서 반환
public class Object {
...
// native 메서드 : OS의 메서드(C언어)
public native int hashCode();
System.identityHashCode(Object obj)
는 Object클래스의 hashCode()와 동일 String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2)); //true
System.out.println(str1.hashCode()); //96354
System.out.println(str2.hashCode()); //96354
System.out.println(System.identityHashCode(str1)); //1221555852
System.out.println(System.identityHashCode(str2)); //1509514333
toString()
, toString()
의 오버라이딩toString()
: 객체를 문자열(String)로 변환하기 위한 메서드 public String toString() {
return getClass().getName()+"@+Integer.toHexString(hashCode());
//설계도객체.클래스이름 + at + 16진수(객체주소)
}
class Card {
String kind;
int number;
Card() {
this("SPADE", 1);
}
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
}
class Ex9_4 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
public String toString() {
return "kind: " + kind +", number: " + number;
}
...
System.out.println(c1.equals(c2));
public boolean equals(Object obj) {
if(!(obj instanceof Card))
return false;
Card c = (Card)obj;
//kind가 Stirng이니깐 ==이 아닌 equals사용
return this.kind.equals(c.kind) && this.number==c.number;
}
// Object클래스의 toString()을 오버라이딩
public String toString() {
return "kind: " + kind +", number: " + number;
}
Objects
클래스는 객체와 관련된 유용한 메서드를 제공하는 유틸 클래스.int hash(Object... values) {...}
매개변수가 가변인자(Ojbect...)
라서 호출시 지정하는 값의 개수가 정해져있지 않다. public int hashCode() {
return Objects.hash(kind, number);
}
...
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
이클립스 메뉴 상단에 Source
를 클릭하면 Generate hashcode() and equals()
가 있는데 이것을 사용해도 됨.
전체 코드
import java.util.Objects;
class Card {
String kind;
int number;
Card() {
this("SPADE", 1);
}
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
//equals()를 오버라이딩하면 hashcode도 오버라이딩 해줘야함.
public int hashCode() {
// Objects 클래스는 객체와 관련된 유용한 메서드를 제공하는 유틸 클래스
// int hash(Object... values) {...} 매개변수가 가변인자(Ojbect)라서 호출시 지정하는 값의 개수가 정해져있지 않다.
return Objects.hash(kind, number);
}
public boolean equals(Object obj) {
if(!(obj instanceof Card))
return false;
Card c = (Card)obj;
//kind가 Stirng이니깐 ==이 아닌 equals사용
return this.kind.equals(c.kind) && this.number==c.number;
}
// Object클래스의 toString()을 오버라이딩
public String toString() {
return "kind: " + kind +", number: " + number;
}
}
class Ex9_4 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.equals(c2));
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
}
}