本质:== 是运算符,equals是方法
== 对基本数据类型是比较内容值,而引用数据类型是比较引用值。
看代码
1 Object类的equals方法
public boolean equals(Object obj) { return (this == obj); }
可见Object下equals的效果就是 == 的效果
2 大多数类重写了equals方法:
String重写后的equals
private final char value[]; public boolean equals(Object anObject) { if (this == anObject) { //如果引用地址是否一致 return true; } if (anObject instanceof String) { //如果传进来的是String类型 String anotherString = (String)anObject; //向下转型 int n = value.length; if (n == anotherString.value.length) { //如果当前字符串长度和被传入的字符串长度一致 char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) //如果两者转化成的字符数组中某个索引位置的值不一样 return false; i++; } return true; } } return false; }
自己写的User类重写equals
public class User implements Serializable { private String name; private int age; //set,get方法 @Override public boolean equals(Object o) { if (this == o) return true; //如果引用地址一样 if (o == null || getClass() != o.getClass()) return false; //如果传入的o是null或者传入的o不是User类型 User user = (User) o; if (age != user.age) return false; //一个个属性分别比较是否一致 return name.equals(user.name); } }