黑马程序员技术交流社区

标题: 关于张老师视频:==和equals方法. [打印本页]

作者: 凝霜的枯藤    时间: 2014-5-8 14:38
标题: 关于张老师视频:==和equals方法.
本帖最后由 凝霜的枯藤 于 2014-5-28 18:17 编辑

张老师视频上讲equals方法是比较对象的内容,而==是比较引用变量的值.是不对的,实际上两个默认都是比较引用变量的值,只不过有的类重写equals方法,使equals方法可以比较对象内容.例如:java.lang.String.
作者: jieyu90    时间: 2014-5-8 18:22
这个,视频里面说的其实也没错,只是有些不规范,至于这么较真啊。。
作者: jsjchenlong    时间: 2014-5-8 22:14
不重写Object类里equals方法,就没法比较值,比较的只是类对象的地址,地址是唯一的,即便是同一个类,不同的对象,比较返回的结果也是false
作者: lvc    时间: 2014-5-9 02:29
“equals”比较地址,“==”比较的是值;
作者: 凝霜的枯藤    时间: 2014-5-9 14:53
jieyu90 发表于 2014-5-8 18:22
这个,视频里面说的其实也没错,只是有些不规范,至于这么较真啊。。

嗯,说的对..只是我自己学习理解的时候,出现了混淆.
作者: 提菩--空    时间: 2014-5-9 16:44
equals方法比较的是堆中对象的地址,==比较的是栈中的变量。不能混用的吧
作者: 凝霜的枯藤    时间: 2014-5-10 14:29
提菩--空 发表于 2014-5-9 16:44
equals方法比较的是堆中对象的地址,==比较的是栈中的变量。不能混用的吧

栈中的变量的值就等于堆中对象的首地址..
作者: 한숨짓다    时间: 2014-5-11 21:59
总结一下
                A:==
                        比较基本类型:比较的是基本类型的值是否相同。
                        比较引用类型:比较的是引用类型的地址值是否相同。
                B:equals()
                        只能比较引用类型。
                        默认情况下,比较的是地址值。
                        但是如果有自己的需求,希望比较的是引用类型的内容是才需要重写该方法。
                        String类中的equals()方法就是这样重写了object中的equals()方法。
作者: 提菩--空    时间: 2014-5-12 13:27
凝霜的枯藤 发表于 2014-5-10 14:29
栈中的变量的值就等于堆中对象的首地址..

引用对象的地址是放在栈中。那你可以变通一下,equals是比较引用对象地址是否相等。而==就是比较栈中的变量是否相等就成了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2