A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝霜的枯藤 中级黑马   /  2014-5-8 14:38  /  1451 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝霜的枯藤 于 2014-5-28 18:17 编辑

张老师视频上讲equals方法是比较对象的内容,而==是比较引用变量的值.是不对的,实际上两个默认都是比较引用变量的值,只不过有的类重写equals方法,使equals方法可以比较对象内容.例如:java.lang.String.

8 个回复

倒序浏览
这个,视频里面说的其实也没错,只是有些不规范,至于这么较真啊。。
回复 使用道具 举报
不重写Object类里equals方法,就没法比较值,比较的只是类对象的地址,地址是唯一的,即便是同一个类,不同的对象,比较返回的结果也是false
回复 使用道具 举报
“equals”比较地址,“==”比较的是值;
回复 使用道具 举报
jieyu90 发表于 2014-5-8 18:22
这个,视频里面说的其实也没错,只是有些不规范,至于这么较真啊。。

嗯,说的对..只是我自己学习理解的时候,出现了混淆.
回复 使用道具 举报
equals方法比较的是堆中对象的地址,==比较的是栈中的变量。不能混用的吧
回复 使用道具 举报
提菩--空 发表于 2014-5-9 16:44
equals方法比较的是堆中对象的地址,==比较的是栈中的变量。不能混用的吧

栈中的变量的值就等于堆中对象的首地址..
回复 使用道具 举报
总结一下
                A:==
                        比较基本类型:比较的是基本类型的值是否相同。
                        比较引用类型:比较的是引用类型的地址值是否相同。
                B:equals()
                        只能比较引用类型。
                        默认情况下,比较的是地址值。
                        但是如果有自己的需求,希望比较的是引用类型的内容是才需要重写该方法。
                        String类中的equals()方法就是这样重写了object中的equals()方法。
回复 使用道具 举报
凝霜的枯藤 发表于 2014-5-10 14:29
栈中的变量的值就等于堆中对象的首地址..

引用对象的地址是放在栈中。那你可以变通一下,equals是比较引用对象地址是否相等。而==就是比较栈中的变量是否相等就成了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马