자바

JAVA 자바 Objects 클래스 해시 코드 생성 hash() , hashCode() ///널 여부 검사 isNull(), nonNull(), requireNonNull()

알통몬_ 2017. 3. 14. 10:20
반응형

해시코드 생성  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
        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

}

}

 

}

반응형