java基礎:Object的equals方法
一:看第一個例子
public class Cat1 {
private String color;
private int height;
private int weight;
Cat1(String color, int height, int weight) {
this.color = color;
this.height = height;
this.weight = weight;
}
public static void main(String[] args) {
Cat1 cat1 = new Cat1("red", 1, 2);
Cat1 cat2 = new Cat1("red", 1, 2);
System.out.println(cat1 == cat2);
System.out.println(cat1.equals(cat2));
}
}
輸出結果:
false
false
cat1 == cat2 很簡單,他們不是同一物件,有不通的儲存地址。
但是cat1.equals(cat2)為什麼是false呢。因為cat是物件,這裡用的是父類的equals方法
而Object類equals方法的實現為:
<strong><span style="font-size:18px;"> public boolean equals(Object obj) {
return (this == obj);
}</span></strong>
所以,Obejct的equals方法本質上還是用==比較的。
二:嘗試重寫Obejct的equals方法
public class Cat2 {
private String color;
private int height;
private int weight;
Cat2(String color, int height, int weight) {
this.color = color;
this.height = height;
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
/**
* 重寫Object的equals方法
*/
public boolean equals(Object obj) {
if (obj == null) {
return false;
} else if (obj instanceof Cat2) {
Cat2 catObj = (Cat2) obj;
if (catObj.getColor() == this.color
&& catObj.getHeight() == this.height
&& catObj.getWeight() == this.weight) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Cat2 cat1 = new Cat2("red", 1, 2);
Cat2 cat2 = new Cat2("red", 1, 2);
System.out.println(cat1.equals(cat2));
}
}
輸出結果:
true
三:String的equals方法
String s1 = "abc";
String s2 = "abc";
System.out.println(s1.equals(s2));
具體重寫實現為:
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;
}
相關文章
- Java基礎系列-equals方法和hashCode方法Java
- Java基礎-- ==號與equals()方法的區別Java
- String類中的equals方法與Object類中的equals方法的不同點Object
- Java基礎- ==和equals和hashCode的區別Java
- 『Java 語法基礎』對 equals() 和 hashCode() 的理解Java
- 【ES6基礎】Object的新方法Object
- 理解Java中物件基礎Object類Java物件Object
- 關於Java中的equals方法Java
- Java基礎——方法的呼叫Java
- Java中 equals() 方法和 == 的區別Java
- Java基礎 --- 方法Java
- Kotlin基礎 — objectKotlinObject
- 搞懂 Java equals 和 hashCode 方法Java
- 簡單介紹java中的equals()方法Java
- Java Object類的各個方法JavaObject
- Java中Object類的常用方法JavaObject
- Java程式設計基礎12——Eclipse使用&Object型別Java程式設計EclipseObject型別
- JavaScript 基礎之物件ObjectJavaScript物件Object
- Equals方法
- java equalsJava
- Java獲取Object中Value的方法JavaObject
- Java基礎-工廠方法模式Java模式
- Java基礎之泛型方法Java泛型
- 《java程式設計基礎》方法的過載Java程式設計
- JAVA中object類中toString()方法JavaObject
- String的equals和hashCode方法
- ==和equals方法的比較
- ==和equals方法的區別
- Java基礎知識篇05——方法Java
- 【Java】equals 和 == 的區別Java
- java基本型別和包裝型別的“==”和equals()方法Java型別
- 夯實Java基礎系列9:深入理解Class類和Object類JavaObject
- 零基礎全方位學習java的方法Java
- java為什麼要重寫hashCode和equals方法Java
- Java基礎——ArrayList方法全解(字典版)Java
- Java的URL.equals()方法竟然執行DNS解析| 黑客新聞JavaDNS黑客
- MapReduce關於key的定義、hashCode()、equals(Object obj)、compareTo(CustomCombineKey other)Object
- 【JAVA】筆記(6)--- toString方法;equals方法;finalize方法;package與import;內部類;Java筆記PackageImport
- java 中equals和==的區別Java