내 프로그램에서 .equals (Die aDie) 메소드를 생성 중입니다. 정적 변수를 포함하여 모든 인스턴스 변수를 비교합니까?.equals (Die aDie) 메소드와 정적 변수 구현하기
답변
정적 변수는 정의상 인스턴스 변수가 아니므로 동일한 클래스의 모든 인스턴스에서 항상 동일합니다.
모든 인스턴스 변수를 비교합니다.
정적 변수는 인스턴스 별이 아닌 클래스 별 변수이므로 동일하게 보장되므로 비교할 필요가 없습니다.
확실히 정적 인 것이 아닙니다.
모두과 비교하여 인스턴스 변수는 개체의 "ID"를 결정하는 요소에 따라 달라집니다. 이는 특정 애플리케이션의 맥락에서만 결정될 수 있습니다. 더 많은 정보가 필요합니다.
예를 들어 책을 나타내는 클래스가있는 경우 제목 (author)에 대한 메타 데이터 만 저장하려는 경우 두 책이 같은 책인지 여부를 확인하기 위해 ISBN 번호를 비교할 수 있습니다. 이러한 데이터베이스를 두 개 병합 한 경우 중복 레코드를 제거해야합니다.
그러나 실제 책의 라이브러리 카탈로그를 구현하는 경우 각 사본은 중요하고 다르기 때문에 ISBN 과 사본 번호를 비교할 수 있습니다. 두 라이브러리를 병합 한 경우 중복 사본을 감지 할 수 있습니다.
equals()를 사용하면 인스턴스 과을 비교할 수 있습니다. 왜냐하면 그 인스턴스는 정적이기 때문에 둘 다 비교할 것이기 때문입니다.
Die
클래스의 모든 인스턴스에서 공유되므로 정적 데이터를 비교하는 것은 쓸모가 없습니다. 그러나 여러 필드를 직접 액세스하여 비교할 수 있습니다 (아래 예제 참조). Die
객체에 복잡한 입력란 (예 : Map
, Set
등)이있는 경우 해당 객체에 대해 equals
메소드도 호출해야합니다 (다시, 아래 예 참조).
당신이 equals()
방법을 제공하려는 경우에는 Object
클래스 (equals (Object anOtherObject
)에서 제공하는 하나보다는 과부하, 또는 적어도 당신은 또한 올바른 값을 반환하는지 확인 equals (Object anOtherObject)
를 오버라이드 (override) 확인을 오버라이드 (override) 기본 구현은 동일한 인스턴스인지 여부 만 확인합니다. 그리고 당신의 방법으로 anOtherObject
이 Die
의 인스턴스인지를 확인해야합니다. String name
, int value
및 Map<Integer> complexField
:
은 여기 Die
클래스는 3 개 필드가 있다고 가정 예입니다
public boolean equals (Object anOtherObject) {
if (anOtherObject == this) {
return true;
}
if (!anOtherObject instanceof Die) {
return false;
}
Die otherDie = (Die) anOtherObject;
if (this.value != otherDie.value ||
!this.name.equals (otherDie.name) ||
!this.complexField.equals (otherDie.complexField)) {
return false;
}
return true;
}
조쉬 블로흐의 "효과적인 자바는"제대로 equals
을 구현하는 방법에 대한 매우 세부 정보 섹션이 있습니다. 당신은 확실히 그것을 읽어야합니다.
부울 등호 (aDie 다이)
잘못, 클래스는 equals(Object)
메소드를 호출하고 등호 (다이)를 무시합니다. 또한 (Object)와 동일한 필드를 사용하여 int hashCode()
메서드를 구현합니다. 그들은 모든이 다이에 대한 동일하기 때문에
@Override public boolean equals(Object aDie){
if(aDie == null || aDie.getClass() != Die.class)return false;
if(aDie == this)return true;
Die other = (Die)aDie;
...
}
@Override public int hashCode(){
...
}
당신은 정적 필드를 무시할 수 있습니다.
"static"키워드로 변수를 선언하면 그 변수를 "클래스 변수"라고합니다. 모든 인스턴스는 동일한 변수 사본을 공유합니다 (항상 같은 클래스의 모든 인스턴스에서 동일합니다). 클래스 변수는 인스턴스를 만들 필요없이 클래스에서 직접 액세스 할 수 있습니다.
- 1. 정적 메소드와 정적 변수 자바
- 2. 정적 메소드와 필드를 상속합니다.
- 3. 정적 메소드와 클래스 확장 android.app.Application?
- 4. 자바 : "xx". equals (variable)보다 나은 변수 ..equals ("xx"), TRUE?
- 5. Java의 정적 메소드와 인스턴스 필드 간 통신
- 6. 도메인 객체 캡슐화 : 정적 메소드와 서비스 클래스
- 7. asmock을 사용하여 정적 메소드와 개인 멤버를 조롱
- 8. equals 메소드를 오버라이드
- 9. .actionPerformed with Java로 변수 구현하기
- 10. Java로 메소드와 매개 변수 히스토리에 접근하기
- 11. PHP의 정적 변수 변수
- 12. JSP, 호스트 모드의 정적 변수, 정적 변수
- 13. 정적 변수
- 14. 정적 메서드 및 변수 란 무엇입니까?
- 15. 목표 C : 정적 메서드 호출로 정적 변수 초기화
- 16. 자유 실행 모드의 AVR ADC의 ADIE 비트
- 17. 인스턴스 변수 또는 정적 변수?
- 18. 정적 변수 대 애플리케이션 변수
- 19. PHPUnit : 죽으면 "die"를 기대하거나 die()를 처리 하시겠습니까?
- 20. 실행 die(); 다른 스크립트에서
- 21. die ('message') 문제가 발생합니다.
- 22. die()의 적절한 사용?
- 23. Die Roll Program의 문제
- 24. 정적 클래스 메소드와 일반 루틴 포인터는 얼마나 호환됩니까?
- 25. 동적으로 정적 변수 (배열)를 호출하십시오.
- 26. 자바 정적 클래스/변수
- 27. ObjectiveC의 정적 변수
- 28. Monodroid의 정적 변수
- 29. 정적 변수 링크 오류
- 30. 정적 변수, 별도의 컴파일
어느 것이 좋습니다. – malhobayyeb
인스턴스 변수 만. 'Die.sides'가 정적이라면'Die a.sides'를'Die b.sides' **와 비교하면 절대로 false가 될 수 없습니다. 통계는 값과 메모리 위치가 동일합니다. –
왜 downvote? –