저는 C++ 배경 출신으로 오늘은 Java를 시작했습니다. 몇 명의 데이터 멤버가있는 클래스가 있다고 가정 해보십시오. 예를 들어 : 결과는 "그들은 동일하지"입니다 여기자바에서 회원 현명한 비교를 구현하려면 어떻게해야합니까?
Person john = new Person("john", "doe");
Person johndoe = new Person("john", "doe");
if (john == johndoe) {
System.out.println("They are Equal");
} else {
System.out.println("They are NOT Equal");
}
:
public class Person {
//Constructors/Destructor
public Person(String strFirstName, String strLastName) {
m_strFirstName = strFirstName;
m_strLastName = strLastName;
m_strFullName = m_strFirstName + m_strLastName;
}
//Getters
public String GetFullName() { return m_strFullName; }
public String GetFirstName() { return m_strFirstName; }
public String GetLastName() { return m_strLastName; }
//Private Data Members
private String m_strFirstName;
private String m_strLastName;
private String m_strFullName;
}
지금 내가 이렇게 말할 수 있습니다. Java가 참조 (메모리 주소)를 비교하고 있으며 메모리의 다른 위치에 있기 때문에 테스트가 실패하기 때문에이 점을 이해합니다. Java가 연산자 오버로딩을 지원하지 않는다는 것을 읽었으므로 연산자 ==를 오버로드 할 수 없으므로 memberwise 비교를 구현하기 위해 재정의 할 메소드가 있습니까? object.equals 메소드는 유망 해 보였지만,이 메소드를 오버라이드 (override)하는 것은 나쁜 습관이라고 읽었습니다.
업데이트 : 오클라호마는 오버라이드가 동일하다고 확신합니다. 그 기사가 나쁘다는 것을 발견 할 수 없습니다. 도움을 주셔서 감사합니다. 자바를 배우면서 더 많은 질문을 할 것입니다 !!
나는 당신이 equals를 오버라이드한다고 생각하지 않는다고 읽었지 만, 왜 안 보이는지 모르겠다 .... 나는 그 기사를 다시 찾아서 게시하려고 노력할 것이다. 평등은 나에게 올바른 길처럼 보일 것입니다. – cchampion
당신은 100 % 절대적으로 equals를 오버라이드하기로되어 있습니다. – danben
위의 코드는 완벽한 이름 필드와 성을 추가하여 전체 이름을 비교할 필요가 없다고 생각한다는 점을 제외하고는 완벽합니다. –