-
在不重写quals方法的情况下
Object源码public boolean equals(Object obj) { return (this == obj); }
所以在不重写的情况下,就是与"=="是一样的
-
在重写了quals方法的情况下
-
String源码
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof 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; }
由于String存在字符串常量池,所以同一地址的字符串肯定是同一字符,否则就进行内容比较.
-
包装类
Integer类(基本数据类型包装类)public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
Double(double的包装类)
public boolean equals(Object obj) { return (obj instanceof Double) && (doubleToLongBits(((Double)obj).value) == doubleToLongBits(value)); }
在基本数据类型的包装类中直接进行数值比较.
-
自定义的类
import java.util.Objects; public class user { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; user user = (user) o; return age == user.age && Objects.equals(name, user.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
进行自定义实现equals方法重写,可以手动实现,也可以使用Alt+Ins选择equals() and hashCode进行生成