本質:== 是運算符,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); } }
浙公網安備 33010602011771號