黑马程序员技术交流社区
标题:
equals()方法的一些疑惑
[打印本页]
作者:
周朋飞
时间:
2012-6-26 10:56
标题:
equals()方法的一些疑惑
本帖最后由 周朋飞 于 2012-6-26 22:13 编辑
在回答别人问题的时候我也产生了一些疑惑
String s1 = new String ("abc");
String s2 = new String ("abc");
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
首先我并没有覆盖父类的equals方法,那么查看jdk源码发现 Object 的equals方法内部是这样
boolean equals(Object o){
return this==o;
}
这样,equal方法里面默认使用的也是== ,那为什么就返回了false呢 传进去的不是也是个s2 的引用吗,是
s1的地址和s2不是不相等吗 为什么却返回true呢
作者:
车风波
时间:
2012-6-26 11:00
s1.equals(s2)是调用的String的equals(),String类把Object类的equals()重写了,它比较的不是内存地址,是string的内容是否相等。
s1==s2是false,因为内存地址不同。
s1.equals(s2)因为都是"abc" 。
作者:
葛奎
时间:
2012-6-26 11:04
String类已经重写了父类中的方法,只要使用string对象调用equals()那么就是重写后的方法
equals()方法比较的是两个字符串对象的内容是否相同
作者:
一生一世
时间:
2012-6-26 11:04
我很同意楼上同学的观点
作者:
吴超
时间:
2012-6-26 11:12
因为String 里面equals被重写,比较的是对象里面的内容是否相等
作者:
李伟
时间:
2012-6-26 12:46
System.out.println(s1==s2);//false//
这个是比较两个对象的地址值,地址值不同所以是false
System.out.println(s1.equals(s2));//true//
这个是比较两个对象的内容是否相同,由于内容相同,所以是true
作者:
余清兰
时间:
2012-6-26 13:05
本帖最后由 余清兰 于 2012-6-26 13:07 编辑
String s1 = new String ("abc");
String s2 = new String ("abc");
System.out.println(s1==s2);//false
你这里创建的是两个不同的对象但内容相同的,你用s1==s2这两个变量名去比较,就相当于是两个名字相同的但人同的两个人去比较,它比较的是对象在堆内存中存储的地址值,所以是false
boolean equals(Object o){
return this==o;
}
this==o 这个是一个传递的实际参数变量内容跟当前对象的变量内容比较,所以equals是比较的对象内容
System.out.println(s1.equals(s2));它就返回的true
作者:
吴琼
时间:
2012-6-26 13:13
==
1:基本数据类型比较的是值是否相等.
2:引用数据类型比较的是地址值是否相等.题中创建了2个对象地址值肯定是不等的.
equals是比较地址值的,题中虽然没有重写equals方法,但是String类重写了比较的是值.建议你去看下String类中重写equals的源码下面是String重写的equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
作者:
周朋飞
时间:
2012-6-26 22:12
嗯 我知道了 大家回答的都很好 我也查API 了
public String toString()返回此对象本身(它已经是一个字符串!)。
指定者:
接口 CharSequence 中的 toString
覆盖:
类 Object 中的 toString
返回:
字符串本身。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2