Objects 클래스
객체 비교, 해시코드 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는
정적 메서드들로 구성된 Object 의 유틸리티 클래스입니다.
아래는 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)
}
구현 클래스
class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student a , Student b) {
if(a.ano < b.ano) return -1;
else if(a.ano == b.ano) return 0;
else return 1;
}
}
실행 클래스
세 개의 학상 객체를 StudentComparator로 비교해서 결가를 리턴합니다.
import java.util.Comparator;
import java.util.Objects;
public class CompareExample {
public static void main(String[] args) {
Student s1 = new Student(1);
Student s2 = new Student(1);
Student s3 = new Student(2);
int result = Objects.compare(s1, s2, new StudentComparator());
System.out.println(result);
result = Objects.compare(s1, s3, new StudentComparator());
System.out.println(result);
}
static class Student {
int sno;
Student(int sno) {
this.sno = sno;
}
}
static class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student a, Student b) {
/*if(a.sno<b.sno) return -1;
else if(a.sno == b.sno) return 0;
else return 1;*/
return Integer.compare(a.sno, b.sno);
}
}
}
동등비교 equals() 와 deepEquals()
Objects.equals(Object a, Object b)
두 객체의 동등을 비교
특이한 점은 a와 b가 모두 null일 경우 true를 리턴합니다.
a와 b가 null이 아닌 경우는 a.equals(b)의 결과를 리턴합니다.
a b Objects.eqauls(a,b)
not null not null a.equals(b)의 리턴값
null not null false
not null null false
null null true
Objects.deepEquals(Object a, Object b)
두 객체의 동등을 비교
a와 b가 서로 다른 배열일 경우, 항목 값이 모두 같다면 true를 리턴합니다.
Arrays.deepEquals(Object[] a, Object[] b)와 동일합니다.
a b Objects.deepEqauls(a,b)
not null(not array) not null(not array) a.equals(b)의 리턴값
not null(array) not null(array) Arrays.deepEquals(a,b)의 리턴값
not null null false
null not null false
null null true
예제)
import java.util.Arrays;
import java.util.Objects;
public class EqualsAndDeepEqualsExample {
public static void main(String[] args) {
Integer o1 = 1000;
Integer o2 = 1000;
System.out.println(Objects.equals(o1, o2)); => true
System.out.println(Objects.equals(o1, null)); => false
System.out.println(Objects.equals(null, o2)); => false
System.out.println(Objects.equals(null, null)); => true
System.out.println(Objects.deepEquals(o1, o2) + "\n"); => true
Integer[] arr1 = { 1, 2 };
Integer[] arr2 = { 1, 2 };
System.out.println(Objects.equals(arr1, arr2)); => false
System.out.println(Objects.deepEquals(arr1, arr2)); => true
System.out.println(Arrays.deepEquals(arr1, arr2)); => true
System.out.println(Objects.deepEquals(null, arr2)); => false
System.out.println(Objects.deepEquals(arr1, null)); => false
System.out.println(Objects.deepEquals(null, null)); => true
}
}
'자바' 카테고리의 다른 글
JAVA 자바 System 클래스 프로그램 종료 exit() /// 가비지 컬렉터 gc() (0) | 2017.03.14 |
---|---|
JAVA 자바 Objects 클래스 해시 코드 생성 hash() , hashCode() ///널 여부 검사 isNull(), nonNull(), requireNonNull() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 소멸자 finalize() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 복제 clone (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체의 문자 정보 toString() (0) | 2017.03.14 |