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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Toxicant 中级黑马   /  2016-9-12 23:01  /  1244 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在使用equals和==的时候有时候判断为true 有时候对象相同却返回false,那么那种情况返回的是正确的,那种是错误的?

19 个回复

正序浏览
家有女王叫萌萌 发表于 2016-9-13 09:24
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据 ...

怎么判断有没有重写equals方法呐?每次都要去看源码么??
回复 使用道具 举报
看了上面的答案,受益匪浅啊
回复 使用道具 举报
Toxicant 发表于 2016-9-12 23:19
如果没重写equals的时候,equals比较的也是地址值

恩恩 受教了
回复 使用道具 举报
==常量是比较值,引用类型是比较地址值;equals 没有重写时是比较地址值,重写后一般都是比较值
回复 使用道具 举报
又看了一遍,加深一下印象
回复 使用道具 举报
之前考试也是总错着样的题,老师强调了好几回
回复 使用道具 举报
首先在Object类中,equals和 ==比较的都是内存地址,你可以看API源码,equals在源码就是 ==实现的。
但是,之后其他有的方法将equals重写,重写之后有些比较的就是属性值,不同的方法底层实现的不一样,所以可以反向记,哪些是比较内存地址的,剩下都是比较属性值的。在类中,同样也可以重写equals,重写之后比较的就是内存地址,你可以用eclipse生成一遍,比较一下,也可以从这里进入源码看一下底层的实现。
回复 使用道具 举报
给满分~~
回复 使用道具 举报
这2个,一个是数值判断,一个是对象判断,及内存地址的判断,我们老师好像是这么讲的
回复 使用道具 举报
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值 * equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,【大部分类已经重写,如String类中的equals方法】如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
回复 使用道具 举报
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值 * equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,【大部分类已经重写,如String类中的equals方法】如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
回复 使用道具 举报
chensc 金牌黑马 2016-9-13 06:26:17
9#
学习学习!
回复 使用道具 举报
我总是错这个 字符串毕竟是否相同用equals ==比较是地址
回复 使用道具 举报
看你用的equal有没有重写咯,没有的话跟==是一样的
回复 使用道具 举报
没重写equal比较是地址值  ==比较的是值  但是equal也可以比较值   是比较的是内容
回复 使用道具 举报
基础数据类型比较用 == 只要值相等就是true
引用数据类型 可以用 ==  和 equals  ,==比较的是地址值,如果重写了equals方法就比较值,如果没有重写equals,底层默认也是用 == 来比较的。     
回复 使用道具 举报
double_x 发表于 2016-9-12 23:04
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。 ...

如果没重写equals的时候,equals比较的也是地址值
回复 使用道具 举报
double_x 发表于 2016-9-12 23:04
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。 ...

如果没重写equals的时候,equals比较的也是地址值
回复 使用道具 举报
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马