자바 객체 class는 모든 Java 클래스의 슈퍼 클래스입니다. 모든 Java 클래스는 기본적으로 Object 클래스를 구현합니다. Java Object 클래스는 두 가지 중요한 메소드를 제공합니다. 두 가지를 비교하다 자바의 객체 , 즉. 같음() 그리고 해시 코드() 방법. 이 섹션에서는 다음 방법을 알아봅니다. 같음() 그리고 해시 코드() 방법이 작동합니다. 이와 함께 우리는 또한 배울 것입니다 Java에서 두 객체를 비교하는 방법 적절한 예를 들어요.
Java는 객체를 비교하기 위해 Object 클래스의 두 가지 메소드를 제공합니다.
- Java equals() 메소드
- 자바 hashCode() 메서드
Java equals() 메소드
그만큼 같음() Object 클래스의 메소드는 두 객체의 동등성을 비교합니다. 동일한 메모리 주소를 공유하는 경우 두 개체는 동일합니다.
통사론:
public boolean equals(Object obj)
이 메서드는 참조 개체를 매개변수로 구문 분석합니다. 객체가 동일하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
객체가 다른 객체와 동일할 수도 있으며, 그런 다음 equals() 메서드는 다음을 따릅니다. 등가 관계 개체를 비교합니다.
- null이 아닌 참조의 경우 x, x.equals(널) 거짓을 반환합니다.
간단히 말해서, null이 아닌 참조에 대해서는 다음과 같이 말합니다. 엑스 그리고 그리고 , 두 참조가 모두 동일한 객체를 참조하는 경우에만 true를 반환합니다.
기억하다: equals() 메서드를 재정의할 때는 hashCode() 메서드도 재정의해야 합니다. 재정의는 동일한 객체가 동일한 해시 코드를 가져야 한다는 hashCode() 메서드의 규칙을 따릅니다.
자바에서 csv 파일 읽기
equals() 메소드의 예
다음 예에서는 다음을 만들었습니다. 건설자 ~의 더블 그리고 긴 클래스를 생성하고 해당 값을 각각 객체에 저장된 인수로 전달합니다.
그 후 첫 번째 println 문에서 equals() 메서드를 호출하고 객체 y를 객체 x와 y를 비교하는 매개 변수로 구문 분석했습니다. 그것은 반환 거짓 x는 double 값을 보유하고 y는 같지 않은 long 값을 보유하기 때문입니다.
마찬가지로 두 번째 println 문에서는 equals() 메서드를 호출하고 Double 클래스의 생성자에서와 동일한 값을 구문 분석했습니다. 그것은 반환 진실 왜냐하면 double 클래스의 객체, 즉 x는 우리가 equals() 메소드에 전달한 것과 동일한 값을 보유하기 때문입니다.
ObjectComparisonExample.java
public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } }
산출:
Objects are not equal, hence it returns false Objects are equal, hence it returns true
== 연산자와 equals() 메서드의 차이점
~ 안에 자바 , == 연산자는 두 참조가 동일한지 여부를 비교합니다. 반면 같음() 메서드는 두 개체를 비교합니다.
객체는 동일한 동일한 상태를 가질 때(보통 변수를 비교하는 경우) 객체는 동일한 클래스 정체성을 공유할 때.
예를 들어, 다음 표현식은 obj1==obj2 평등이 아닌 정체성을 테스트합니다. 표현을 하면서 obj1.equals(obj2) 평등을 비교합니다.
자바 hashCode() 메서드
Java에서 해시 코드는 32비트 부호 있는 정수 값입니다. 에서 제공하는 고유 ID입니다. JVM Java 객체에. 각 Java 개체는 해시 코드와 연결됩니다. 해시 코드는 HashTable, HashSet 등과 같은 해시 기반 데이터 구조로 관리됩니다.
기억하다: equals() 메서드를 재정의할 때 hashCode() 메서드도 재정의해야 합니다.
통사론:
c 부울
public int hashCode()
각 인스턴스에 대해 고유한 개체의 무작위로 생성된 해시 코드 값을 반환합니다. 임의로 생성된 값은 프로그램을 여러 번 실행하는 동안 변경될 수 있습니다.
hashCode의 일반 계약은 다음과 같습니다.
- 애플리케이션 실행 중에 hashCode() 메서드가 두 번 이상 호출되면 동일한 해시 코드(정수 값)를 일관되게 반환합니다. 개체를 수정하면 안 됩니다.
- equals() 메서드에 따라 두 개체가 동일한 경우 이 두 개체에 대해 hashCode() 메서드를 호출하면 동일한 정수 값이 생성되어야 합니다.
- 두 객체가 equals() 메서드에 따라 동일하지 않은 경우 이 두 객체에 대해 hashCode() 메서드를 호출하면 고유한 정수 값이 생성될 수 있습니다. 이는 두 개체에 대해 동일한 해시 코드를 생성할 수 있음을 의미합니다.
hashCode() 메소드의 예
다음 예에서는 두 개의 클래스를 만들었습니다. Employee.java 그리고 HashCodeExample.java .
Employee 클래스에서는 int 유형의 regno와 String 유형의 name이라는 두 개의 필드를 정의했습니다. 그런 다음 Employee 클래스의 생성자를 만들고 이 두 필드를 매개변수로 전달했습니다.
객체 비교를 수행하기 위해 이름이 별도의 클래스를 만들었습니다. 해시코드예 . 이 클래스에서는 Employee 클래스의 두 인스턴스를 만들었습니다. emp1 그리고 emp2 . 그런 다음 객체를 사용하여 hashCode() 메서드를 호출했습니다. 해시 코드 값을 변수에 저장했습니다. ㅏ 그리고 비 , 각각.
Employee.java
public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
HashCodeExample.java
public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } }
산출:
자바 코드 예제
hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false
equals() 메서드 재정의
자체 구현을 제공하려는 경우 다음과 같은 방법으로 equals() 메서드를 재정의할 수 있습니다.
//overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); }
위의 코드 조각은 두 직원이 동일한 메모리 주소에 저장되거나 동일한 regno를 갖는 경우 동일하다는 것을 보여줍니다. 위의 코드 조각으로 프로그램(HashCodeExample.java)을 실행하면 다음과 같은 출력을 얻습니다.
산출:
hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true