>Java >java지도 시간 >Java 참조 변수 동등성 및 객체 동등성

Java 참조 변수 동등성 및 객체 동등성

巴扎黑
巴扎黑원래의
2016-12-02 09:34:461921검색

Java에서는 객체가 동일한지 여부를 확인하기 위해 "==" 및 equals() 메서드를 자주 사용합니다.
힙의 모든 개체에는 참조 변수가 있습니다. 참조 변수에서 참조하는 개체가 없으면 힙의 GC가 다시 돌아와서 해당 개체와 채팅합니다.
"=="의 비교, 기호의 양쪽은 객체의 참조 변수입니다. 비교 결과가 true이면 기호의 양쪽 참조 변수가 동일한 객체를 참조한다는 의미입니다. "== "는 참조 변수를 비교합니다. 그 안에 있는 값이므로 "==" 비교는 참조 비교입니다.
그러나 의미가 동일한지 확인하기 위해 서로 다른 두 개체를 비교하면 어떻게 될까요? 예를 들어, 두 개의 Student 개체가 동일한 인스턴스 변수 name과 sex를 가지고 있습니다. 이를 두 개의 동일한 개체로 간주할 수 있습니까?
equals() 메서드
이를 위해서는 equals() 메서드를 사용해야 합니다. 먼저 알아야 할 것은 모든 클래스의 상위 클래스인 Object에 equals() 메서드가 정의되어 있다는 것입니다. Object의 같음 비교 방법은 "=="와 유사합니다. 비교되는 두 개체가 동일한 개체인 경우에만 true를 반환하고, 그렇지 않으면 false를 반환합니다. 따라서 클래스의 equals() 메서드를 재정의하여 힙에 있는 두 개의 서로 다른 개체가 의미가 동일한지 확인합니다. equals() 메서드를 재정의하기 전에 hashcode() 메서드를 재정의해야 합니다. () 메서드를 사용하면 먼저 두 개체의 hashcode()가 반환한 값을 비교합니다. 동일하지 않으면 hashcode() 메서드를 재정의하면 동일한 개체가 모두 반환됩니다. hashcode() 메서드에서 결과 변수 값을 선언하면 동일한 해시코드 값이 반환됩니다(예:
[code="java"]public int hashCode() {
int result=17). ;
결과= 31*result+name!=null?name.hashCode():0
결과=31*result+region!=null?region.hashCode():0; 31*result+position! =null?position.hashCode():0;
return result;
}
그런 다음 equals() 메소드로 돌아가서 두 객체의 인스턴스 변수가 무엇인지 확인합니다. 동일하면 equals() 메서드는 true를 반환하고, 인스턴스 변수가 다르면 false를 반환합니다.
그럼 특정 클래스를 어떻게 다시 작성해야 할까요? , 각 클래스의 인스턴스 변수가 다르기 때문입니다(새 객체를 생성할 때 특별한 구조가 없는 경우 함수 및 인스턴스 변수는 기본값을 가지므로 새로 생성된 두 개의 다른 유형도 동일합니다. 인스턴스 변수가 모두 동일하기 때문입니다) 기본값).

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.