해시코드 생성 hash(), hashCode()
Objects,hash(Object... values) 메서드 :
매개 값으로 주어진 값들을 이용해서 해시 코드를 생성하는 역할
매개값들로 배열을 생성하고 Arrays.hashCode(Obejct[])를 호출해서 해시코드를 얻고값을 리턴.
이 메서드는 클래스가 hashCode()를 재정의할 때 리턴값을 생성하기 위해서 사용하면 좋습니다.
클래스가 여러 가지 필드를 가지고 있을 때 필드들로부터 해시코드를 생성하면
동일한 필드값을 가지는 객체는 동일한 해시코드를 가질 수 있습니다.
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
Objects.hashCode(Object o)는 매개값으로 주어진 객체의 해시코드를 리턴하기 때문에 o.hashCode()의 리턴값과 동일합니다. 차이점은 매개값이 null이면 0을 리턴합니다.
해시코드 생성 예제
import java.util.Objects;
public class HashCodeExample {
public static void main(String[] args) {
Student s1 = new Student(1, "알통몬");
Student s2 = new Student(1, "알통몬");
System.out.println(s1.hashCode());
System.out.println(Objects.hashCode(s2));
}
static class Student {
int sno;
String name;
Student(int sno, String name) {
this.sno = sno;
this.name = name;
}
@Override
public int hashCode() {
return Objects.hash(sno, name);
}
}
}
널 여부 조사 isNull(), nonNull(), requireNonNull()
isNull(Object o)은 매개값이 null일 경우 true를 리턴.
nonNull(Object o)은 매개값이 not null일 경우 true를 리턴.
requireNonNull()는 아래 세가지로 오버로딩되어 있습니다.
리턴타입 메서드(매개변수) 설명
T requireNonNull(T obj) not null -> obj
null -> NullPointerException
T requireNonNull(T obj, String message) not null -> obj
null -> NullPointerException(message)
T requireNonNull(T obj, not null -> obj
Supplier<STring>msgSupplier) null -> NullPointerException(msgSupplier.get())
예제)
import java.util.Objects;
public class NullExample {
public static void main(String[] args) {
String str1 = "티스토리";
String str2 = null;
System.out.println(Objects.requireNonNull(str1)); // 티스토리
try {
String name = Objects.requireNonNull(str2);
} catch(Exception e) {
System.out.println(e.getMessage()); //null
}
try {
String name = Objects.requireNonNull(str2, "이름이 없음.");
} catch(Exception e) {
System.out.println(e.getMessage()); //이름이 없음.
}
try {
String name = Objects.requireNonNull(str2, ()->"이름이 없음2");
} catch(Exception e) { 람다식, 뒤에서 공부하겠습니다.
System.out.println(e.getMessage()); // 이름이 없음2
}
}
}
'자바' 카테고리의 다른 글
JAVA 자바 System 클래스 현재 시각 읽기 currentTimeMiles() , nanoTime() /// 시스템 프로퍼티 읽기 getProperty() (0) | 2017.03.14 |
---|---|
JAVA 자바 System 클래스 프로그램 종료 exit() /// 가비지 컬렉터 gc() (0) | 2017.03.14 |
JAVA 자바 Objects 클래스 객체 비교 compare(T t1, T t2, Comparator<T> c) /// 동등비교 equals() 와 deepEquals() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 소멸자 finalize() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 복제 clone (0) | 2017.03.14 |