Java 将equals override为比较所有object的方法
2017-12-29 13:00
483 查看
Java 默认的equals只能比较同类型的object,一旦比较对象类型不同就会报错。下面是当类型不同时返回false避免报错的方法。
Example:public class Student implements Comparable<Student> { private String name; private int id; public Student(String name, int id) { this.name = name; this.id = id; } public String toString() { return "Name: " + name + ", Id: " + id; } public int compareTo(Student other) { if (id < other.id) { return -1; } else if (id == other.id) { return 0; } else { return 1; } } public boolean equals(Object obj) { if (obj == this) { return true; } else if (!(obj instanceof Student)) { return false; } else { return compareTo((Student) obj) == 0; } } /* If we override equals we must have correct hashCode */ public int hashCode() { return id; } }Driver:
import java.util.ArrayList; import java.util.Collections; public class Driver { public static void main(String[] args) { ArrayList<Student> roster = new ArrayList<Student>(); roster.add(new Student("Mary", 10)); roster.add(new Student("Bob", 1)); roster.add(new Student("Laura", 17)); roster.add(new Student("Albert", 34)); /* Collection is sorted by id */ Collections.sort(roster); for (Student s : roster) { System.out.println(s); } /* equals method tests */ Student s1 = new Student("John", 10); Student s2 = new Student("John", 10); Student s3 = new Student("Mary", 20); System.out.println(s1.equals(s2)); System.out.println(s2.equals(s1)); System.out.println(s1.equals(s3)); System.out.println(s1.equals(null)); } }输出为:
Name: Bob, Id: 1 Name: Mary, Id: 10 Name: Laura, Id: 17 Name: Albert, Id: 34 true true false false
相关文章推荐
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- java中equals方法和“==”的比较
- Java中equals方法比较的是什么?
- java中equals方法和“==”的比较
- 深入java的equals方法,怎么比较两个对象的内容是否相等?对象的内容指的是什么?
- java编写比较对象相等equals方法
- toCharArray()方法 和 Java中比较两个字符串是否相等equals方法
- java中equals方法和“==”的比较
- java中equals方法和“==”的比较
- JAVA中==和equals方法 比较
- 【java基础】==与equals()方法比较
- java中equals方法和“==”的比较
- JAVA初学之Object类之toString方法、equals方法
- Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
- Effective Java Item8-在覆盖equals(Object类的nonfinal方法)时遵循接口规范
- java.lang.Object的equals()和hashCode()方法小结
- Java:所有的equals方法实现都是错误的?
- java 的Object的equals方法
- 学习effective java-8对所有对象共同的方法之覆写equals方法时请遵从一般规约