본문 바로가기

일/JAVA

java11.basic_API.Objects

/*

Objects클래스

Object클래스와 유사한 이름을 가진 java.util.Objects클래스는 객체의 비교, 해시코드생성,

null여부, 객체문자열의 리턴등의 연산을 수행하는 static메서드로 구성된 Object의 유틸리티

클래스이다.

 

1. 객체비교(compare(T a, T b, Comparator<T> c))

Objects.compare()메서드는 2개의 객체를 비교해서 int값(-1,0,1)을 리턴한다.

java.util.Compare<T>는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare(a,b)

메서드가 정의되어 있다.

*/

public class CompareMain {

 

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);

System.out.println("비교결과= " +Objects.compare(s1, s3, new StudentComparator()));

System.out.println("비교결과= " +Objects.compare(s3, s1, new StudentComparator()));

}

static class Student{

int sno;

public 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);

}

}

}

/*

Objects클래스

 

2. 동등비교(equals(), deepEquals())

Objects.equals(Object a, Object b)메서드는 2개 객체의 동등비교를 하는데

1) a와 b가 모두 null일 경우 true

2) a와 b가 모두 not null일 경우 a.equals(b)의 결과를 리턴

 

Objects.deepEquals(Object a, Object b)메서드 역시 2개 객체의 동등을 비교하는데

1) a와 b가 서로 다른 배열일 경우, 항목의 값이 모두 같다면 true를 리턴

2) 이 메서드는 Arrays.deepEquals(Object[] a, Object[] b)와 동일하다.

*/

public class EqualsAndDeepEqualsMain {

 

public static void main(String[] args) {

Integer o1 = 1000;

Integer o2 = 1000;

System.out.println(Objects.equals(o1, o2));

System.out.println(Objects.equals(o1, null));

System.out.println(Objects.equals(null, o2));

System.out.println(Objects.equals(null, null));

System.out.println(Objects.deepEquals(o1, o2));

System.out.println();

 

Integer[] a1 = {1,2,3};

Integer[] a2 = {1,2,3};

System.out.println(Objects.equals(a1, a2));

System.out.println(Objects.deepEquals(a1, a2));

System.out.println(Objects.deepEquals(a1, null));

System.out.println(Objects.deepEquals(null, a2));

System.out.println(Objects.deepEquals(null, null));

}

 

}

/*

Objects클래스

 

3. 해시코드(hash(), hashCode())

Object.hash(Object...value)메서드는 주어진 값들을 이용해서 해시코드를 생성하는

기능을 하는데 주어진 매개값들로 배열을 생성하고 Arrays.hashCode(Object[] a)를 호출

해서 해시코드를 얻고 이 값을 리턴한다.

 

이 메서드는 클래스가 hashCode()를 재정의할 때 리턴값을 생성하기 위해 사용하면 좋다.

클래스가 여러가지 필드를 가지고 있을 때 이 필드들로부터 해시코드를 생성하게 되면

동일한 필드값을 가지는 객체는 동일한 해시코드를 얻을 수가 있다.

 

*/

public class HashCodeMain {

 

public static void main(String[] args) {

Student s1 = new Student(1, "홍길동");

Student s2 = new Student(1, "홍길동");

 

System.out.println(s1.hashCode());

System.out.println(s2.hashCode());

System.out.println();

 

System.out.println(Objects.hashCode(s1));

System.out.println(Objects.hashCode(s2));

 

}

static class Student{

int sno;

String name;

public Student(int sno, String name) {

this.sno = sno;

this.name = name;

 

}@Override

public int hashCode() {

return Objects.hash(sno,name);

}

}

}

 

 

' > JAVA' 카테고리의 다른 글

java11.basic_API.string  (0) 2023.05.25
java11.basic_API.class  (0) 2023.05.25
java11.basic_API  (0) 2023.05.25
java09.exception  (0) 2023.05.25
java08.nested  (0) 2023.05.25