黑马程序员技术交流社区
标题:
==和equals的区别?没理解。。。
[打印本页]
作者:
David.L
时间:
2014-7-18 18:25
标题:
==和equals的区别?没理解。。。
本帖最后由 David.L 于 2014-7-18 18:26 编辑
下面代码运行结果为什么是这样?为什么一对是false和true,另一对确是2个都是false
false
true
false
false
-----------------------------------------------------------
class Demo
{
private int num;
Demo(int num)
{
this.num=num;
}
}
class Day08
{
public static void main(String[] args)
{
String c=new String("faa");
String d=new String("faa");
System.out.println(c==d);
System.out.println(c.equals(d));
Demo e=new Demo(4);
Demo f=new Demo(4);
System.out.println(e==f);
System.out.println(e.equals(f));
}
}
作者:
郭良
时间:
2014-7-18 18:46
一个方法,一个符号,实质不同,具体用法具体讨论
作者:
孤守星空
时间:
2014-7-18 18:48
好像有对地址进行判断的
作者:
阿磊
时间:
2014-7-18 18:56
在String中,有覆写了Object里面的equals方法的,比较的是两个字符串是否一样,。而==呢则比较的是两个对象所指向的地址值。你的c和d分别new了两个对象,所以开辟了两个空间,所以地址值肯定是不一样的,但是c和d的内容却是一样的所以c==d是false。而c.equals(d)是true。
而在e和f中也是一样,你的==和equals都是针对引用型变量来进行比较,没有调用e.num,比较的是两个对象。
在这里==和上面一样,比较的是地址值。这里的equals用的是Object类中的比较方式,Demo并没有复写,所以还是以比较地址值的方式在比较,所以两个都是false
作者:
单线程xia
时间:
2014-7-18 19:27
Object基类的equals()方法是 == 。
public boolean equals(Object obj) {
return (this == obj);
}
而String
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里的equals方法已经override。
然后你结合3楼的来看,懒得打字了。。
作者:
新语新空
时间:
2014-7-18 19:56
楼上两个结合起来看很明白。简单来说,String复写了equals方法,所以,String类型的equals方法是比较内容是否相等,而==比较的是地址是否相等。而没有复写equals的Demo类比较的是地址是否相等,实际上等同于==。
作者:
人心如水
时间:
2014-7-18 20:04
好多人问这类问题,这个帖子的回答可以完美解决:D
作者:
a191170796
时间:
2014-7-18 20:06
过来学习学习!!!
作者:
青程
时间:
2014-7-18 20:08
一个比地址,一个比内容
作者:
止询初衷
时间:
2014-7-18 21:50
我是路过的,。。。
作者:
南柯一梦
时间:
2014-7-18 22:15
String类的equals方法复写了Object类的equals比较方法,比较的是两个字符串是否相等,而==比较两个地址值是否相等,而Demo类继承Obje,Object默认equals方法底层也是==,所以,所以结果是false,true和false与fase
作者:
杨冬冬
时间:
2014-7-18 22:43
equals()原是object定义的方法,作用同符号“==”一样是比较的是地址,object 是所有类的父类,jdk中的类大部分都重写了equals()方法使其变成比较内容的方法,而上面的Demo是一个自定义类,不在jdk中,没有重写equals()方法,所以,System.out.println(e.equals(f));比较的是他们的地址值,不是其内容
作者:
歸羽
时间:
2014-7-18 22:45
一个比较的是内存中的地址值,一个复写了方法比较的是内容
作者:
歸羽
时间:
2014-7-18 22:46
一个比较的是内存中的地址值,一个复写了方法比较的是内容
作者:
xwh1230
时间:
2014-7-18 22:46
兄弟, 在引用对象中==比较的是对象的地址值,所以,只有比较本身的时候才会是true,并不是值相等就true;equals默认使用的是==比较,而String类重写了equals()方法,这个方法时判断对象中的属性值是否相等,所以为true
作者:
Adjin
时间:
2014-7-19 09:47
==和Object中的equals都比较的是地址
但是String中重写了equals,让它比较内容
作者:
微笑女皇
时间:
2014-7-19 16:04
学习了
作者:
签发
时间:
2014-7-19 16:18
equals是一个方法。==是一个运算符
作者:
as_heima
时间:
2014-7-19 19:37
== 比较的是值的地址 equals比较的是值的本身
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2