java equals方法是object類別中的方法,只能用於判斷引用類型;equals方法預設判斷的是位址是否相等,子類別中往往重寫該方法,用於判斷內容是否相等,其使用語法如「public boolean equals(Object obj) {return (this == obj);}」。
本教學操作環境:Windows10系統、java8、Dell G3電腦。
Java中的equals方法
"=="是一個比較運算子。
Object類別中的equals方法的來源碼:
Object類別中的equals方法預設就是比較物件位址是否相同。
public boolean equals(Object obj) { return (this == obj); }
"hello".equals("abc");
解釋:this指的就是目前對象,this是指equals方法是誰呼叫的,上面的hello呼叫的equals,所以this指的是字串hello,而==右邊的obj對象,是傳入的abc。
練習一:
package object; /* 判断两个person对象的内容是否相等 如果两个person对象的各个属性值都一样,则返回true,反之返回false */ public class EqualsExercise { public static void main(String[] args) { Person person1 = new Person("jack", 10, '男'); Person person2 = new Person("jack", 10, '男'); System.out.println(person1.equals(person2)); //输出结果是true } } class Person { private String name; private int age; private char gender; //重写Object的equals方法 public boolean equals(Object obj) { //如果比较的两个对象是同一个对象,则直接返回true if (this == obj){ //this就代表调用equals方法的那个对象,obj就是方法里面的实参 return true; } //类型判断 if (obj instanceof Person){ //obj是Person,我们才比较 //进行 向下转型(即obj转成Person); 因为我需要得到obj的各个属性,如果不转型,拿不到 Person p = (Person) obj; return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender; } //如果不是person,则直接返回false;总不能拿一个人跟一个狗比 return false; } public Person(String name, int age, char gender) { this.name = name; this.age = age; this.gender = gender; } 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; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } }
Tips:
#instanceof的用法:
result = object instanceof class
instanceof左邊是對象,右邊是類別;當物件是右邊類別或子類別所建立物件時,傳回true;否則,返false。
練習二:
sout5:s1和s2都是對象,因此==判斷的是地址是否相同,false# 解釋:
- sout1:p1和p2都是對象,因此==判斷的是位址是否相同,false
- sout2:p1.name和p2.name都是字串,因此這裡的equals調用的是String類別的中的equals方法,判斷的是內容是否相同,true
- sout3:p1和p2都是對象,因此這裡的equals是Object類別中的equals方法,判斷的是地址是否相同,false
- sout4:s1和s2都是String類別的對象,因此這裡的equals呼叫的是String類別的中的equals方法,判斷的是內容是否相同,true
練習三:
sout6:都不是同一種類型,==直接編譯錯誤解釋:
- sout1:65和65.0是相等的,true
- sout2:字元的本質還是數字,查閱AscII表,A就是12,true
- sout3:沒啥說的
- sout4:沒啥說的
- sout5:沒啥說的
以上是java equals方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!