Objects 클래스 ]
java.util.Objects클래스는 객체 비교, 해시코드 생성,null여부, 객체 문자열 리턴 등의 연산을 수행하는 정적 메소드로 구성된Object의 유틸리티 클래스이다.
다음은 Objects 클래스가 가지고 있는 정적 메소드들이다.

compare(T a, T b, Comparator<T> c) )
objects.compare(T a, T b, Comparator<T> c)메소드는 두 객체를 비교자(Comparator)로 비교해서int값을 리턴한다.
java.util.Comparator<T>는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare(T a, T b) 메소드가 정의되어 있다. (T: 비교할 객체 타입)
compare() 메소드의 리턴 타입은 int인데, a가 b보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 구현 클래스를 만들어야 한다.
public interface Comparator<T> {
int compare(T a, T b);
}
equals()와 deepEquals() )equals()Objects.equals(Object a, Object b)는 두 객체의 동등을 비교하는데 다음과 같은 결과를 리턴한다.
a와 b가 모두 null일 경우 true를 리턴한다.a와 b가 null이 아닌 경우는 a.equals(n)의 결과를 리턴한다.
deepEquals()Objects.deepEquals(Object a, Object b) 역시 두 객체의 동등을 비교한다.
a와 b가 서로 다른 배열일 경우, 항목 값이 모두 같다면 true를 리턴한다. (Arrays.deepEquals(Object[] a, Object[] b)와 동일)

hash(), hashCode() )Objects.hash(Object...values) 메소드는 매개값으로 주어진 값들을 이용해서 해시 코드를 생성하는 역할을 하는데,
주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[])를 호출해서 해시코드를 얻고 이 값을 리턴한다.
이 메소드는 클래스 hashCode()를 재정의할 때 리턴값을 생성하기 위해 사용하면 좋다.
클래스가 여러 가지 필드를 가지고 있을 때 이 필드로부터 해시코드를 생성하게 되면 동일한 필드값을 가지는 객체는 동일한 해시코드를 가질 수 있다.
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
Objects.hashCode(Object o)는 매개값으로 주어진 객체의 해시코드를 리턴하기 때문에 o.hashCode()의 리턴값과 동일하지만, 매개값이 null이면 0을 리턴한다는 점은 다르다.
isNull(), nonNull(), requireNonNull() )Objects.isNull(Object obj)는 매개값은 null일 경우 true를 리턴한다.nonNull(Object obj)는 매개값이 not null일 경우 true를 리턴한다.requireNonNull()는 다음 세 가지로 오버로딩되어 있다.
not null이면 첫 번째 매개값을 리턴하고,null이면 모두 NullPointerException을 발생시킨다.NullPointerException의 예외 메시지를 제공한다.toString() )Objects.toString()은 객체의 문자 정보를 리턴하는데, 다음의 두 가지로 오버로딩되어 있다.

첫 번째 매개값이
not null이면 toString()으로 얻은 값을 리턴하고,null이면 "null" 또는 두 번째 매개값인 nullDefault를 리턴한다.이것이 자바다 책