1、String中的equals方法
String s1 = "String"; String s2 = "String"; System.out.PRintln(s1.equals(s2));
結果為:true
因為String類中的equals方法重寫了Object類中的equals方法。
Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object.(String類equals方法 英文API文檔)
將此字符串與指定的對象比較。當且僅當該參數不為 null,并且是與此對象表示相同字符序列的 String 對象時,結果才為 true。(String類equals方法 中文API文檔)
2、Object類中的equals方法
1 Name n1 = new Name("f1","l1"); 2 Name n2 = new Name("f1","l1"); 3 System.out.println(n1.equals(n2)); 4 5 class Name { 6 private String fistname, lastname; 7 8 public Name(String fistname, String lastname) { 9 this.fistname = fistname;10 this.lastname = lastname;11 }12 13 public String GetFistName() {14 return fistname;15 }16 17 public String GetLastName() {18 return lastname;19 }20 21 public String toString() {22 return fistname + " " + lastname;23 }
結果為:false
對于new出的對象之間進行equals比較,在沒有重寫equals方法的情況下,他們之間的比較基于他們在內存中的存放的地址,所以上面輸出的為false。
那么如果要使他們輸出結果為true該如何重寫equals呢?
好,請看下面一段代碼:
Name n1 = new Name("f1","l1");Name n2 = new Name("f1","l1");System.out.println(n1.equals(n2));class Name { private String fistname, lastname; public Name(String fistname, String lastname) { this.fistname = fistname; this.lastname = lastname; } public String GetFistName() { return fistname; } public String GetLastName() { return lastname; } public String toString() { return fistname + " " + lastname; } public boolean equals(Object obj){ if(obj instanceof Name ){ //判斷obj是否為Name類型 Name name = (Name) obj; //由于訪問Name特有的成員,需要把obj裝換成Name類 return(fistname.equals(name.fistname)&&lastname.equals(name.lastname));//判斷具體內容是否相等 } return super.equals(obj); } 結果為:true
這里重寫了Object類的equals方法
新聞熱點
疑難解答