您的位置:首页 > 移动开发 > Objective-C

问题1 String类和Object类中的equals方法比较

2015-11-22 13:20 447 查看
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方法

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;
}


结果为: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方法

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: