物件的比較,原則上必須 Override Object 物件內的 equals() 方法:
public class Employee { private int empId; private String name; private String ssn; private double salary; public Employee(int empId, String name, String ssn, double salary) { this.empId = empId; this.name = name; this.ssn = ssn; this.salary = salary; } @Override public boolean equals(Object obj) { boolean result = false; if ((obj != null) && (obj instanceof Employee)){ Employee e = (Employee)obj; if ((e.empId == this.empId) && (e.name.equals(this.name)) && (e.ssn.equals(this.ssn)) && (e.salary == this.salary)){ result = true; } } return result; } //......請參考這一篇程式內容...... }
測試用程式:
public class Demo { public static void main(String[] args){ Employee e = new Employee(101, "Jim Smith", "011-12-2345", 100_000.00); Employee m = new Manager(102, "Joan Kern", "012-23-4567",110_450.54, "Marketing"); Employee es = e; Employee es2 = new Employee(101, "Jim Smith", "011-12-2345", 100_000.00); if ( e == es ){ System.out.println("1.同一物件"); } if ( e.equals(es)){ System.out.println("1.物件內容相同"); } if ( e == es2 ){ System.out.println("2.同一物件"); } if ( e.equals(es2)){ System.out.println("2.物件內容相同"); } if ( e == m ){ System.out.println("3.同一物件"); } if ( e.equals(m)){ System.out.println("3.物件內容相同"); } } }