黑马程序员技术交流社区
标题:
equals
[打印本页]
作者:
马上都有
时间:
2014-5-20 17:41
标题:
equals
为什么用String类声明的对象去调用equals方法会返回true
比如String str1 = new String(“java”)
String str2 = new String(“java”)
这个返回的是ture
但是下面的这个语句一定要重写equals中的方法才返回ture,不然就是false
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
作者:
海世山盟
时间:
2014-5-20 18:09
首先:equlas是超类Object里面的方法,它的出现是为了判断两个对象是否指向同一个引用。因此如果直接调用equlas的话就是比较两个对象的地址。
而String类里面复写了equals方法,它比较的是两个字符串的内容是否相同。因此你上面的两个问题,正解。
由此看出来,我们如果想用equals方法比较我们自定义内容时,就需要复写该方法。
比如:我们要比较person类里面的人名字
public boolean equals(Object obj)
{
if(obj instanceof Person)
person p=(person)obj;
retrun this.name.equals(p.name)
}
作者:
youcyou
时间:
2014-5-20 23:02
字符串的equals是判断字符串内容是否相同的
作者:
alax
时间:
2014-5-21 03:14
字符串的equals是判断字符串内容是否相同而你定义的两个雷如果不重新equals方法比较的是连个对象的hash值是否相等
作者:
张志民
时间:
2014-5-21 11:01
二楼说的很明白,string类复写了eauals方法
作者:
艮昕辶
时间:
2014-5-21 14:21
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;
}
复制代码
这是String类的源文件
String类的equals方法不能被复写,String是final类型无法继承,不能复写方法,
判断两个对象是否相等hashCode()方法和equals()方法都要复写
这是老毕说的
作者:
chenzhiyuan
时间:
2014-5-23 10:16
凡是是用obj的都是java顶层封装好的,比的是父类中的equals,而在自己定义的对象中,不能用父类的equals去比较,必须重写父类的 hashCode() 和equals()方法,自定义的类创建的对象,每new出的一个,对象对象的地址不一样,要定义他们的比较方法,为了安全起见而不是用java写好的方式比较,
作者:
飘渺≮★耘
时间:
2014-5-23 10:33
String类中本身就重写了equals方法,比较的是字符串,而我们自己定义的类默认继承object,不重写equals方法调用的就是object类的equals,而object类的equals比较的是地址
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2