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方法