黑马程序员技术交流社区

标题: equals和==的区别 [打印本页]

作者: Toxicant    时间: 2016-9-12 23:01
标题: equals和==的区别
在使用equals和==的时候有时候判断为true 有时候对象相同却返回false,那么那种情况返回的是正确的,那种是错误的?

作者: double_x    时间: 2016-9-12 23:04
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。
作者: Toxicant    时间: 2016-9-12 23:18
double_x 发表于 2016-9-12 23:04
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。 ...

如果没重写equals的时候,equals比较的也是地址值
作者: Toxicant    时间: 2016-9-12 23:19
double_x 发表于 2016-9-12 23:04
==比较基本数据类型比较的是值,比较引用数据类型比较的是地址值;equals方法比较的是内容。 ...

如果没重写equals的时候,equals比较的也是地址值
作者: java程序猿    时间: 2016-9-12 23:28
基础数据类型比较用 == 只要值相等就是true
引用数据类型 可以用 ==  和 equals  ,==比较的是地址值,如果重写了equals方法就比较值,如果没有重写equals,底层默认也是用 == 来比较的。     
作者: changfa    时间: 2016-9-12 23:37
没重写equal比较是地址值  ==比较的是值  但是equal也可以比较值   是比较的是内容
作者: wo1026756529    时间: 2016-9-12 23:56
看你用的equal有没有重写咯,没有的话跟==是一样的
作者: czhmawy    时间: 2016-9-13 00:00
我总是错这个 字符串毕竟是否相同用equals ==比较是地址
作者: chensc    时间: 2016-9-13 06:26
学习学习!
作者: 家有女王叫萌萌    时间: 2016-9-13 09:24
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值 * equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,【大部分类已经重写,如String类中的equals方法】如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
作者: 家有女王叫萌萌    时间: 2016-9-13 09:29
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值 * equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,【大部分类已经重写,如String类中的equals方法】如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性
作者: wxc949174604    时间: 2016-9-13 09:31
这2个,一个是数值判断,一个是对象判断,及内存地址的判断,我们老师好像是这么讲的
作者: 唱情歌的神父    时间: 2016-9-13 09:37
给满分~~
作者: 指間淚痕    时间: 2016-9-13 10:19
首先在Object类中,equals和 ==比较的都是内存地址,你可以看API源码,equals在源码就是 ==实现的。
但是,之后其他有的方法将equals重写,重写之后有些比较的就是属性值,不同的方法底层实现的不一样,所以可以反向记,哪些是比较内存地址的,剩下都是比较属性值的。在类中,同样也可以重写equals,重写之后比较的就是内存地址,你可以用eclipse生成一遍,比较一下,也可以从这里进入源码看一下底层的实现。
作者: wangyqwei    时间: 2016-9-13 18:49
之前考试也是总错着样的题,老师强调了好几回
作者: fiendGG    时间: 2016-9-13 22:08
又看了一遍,加深一下印象
作者: 灵动    时间: 2016-9-13 22:20
==常量是比较值,引用类型是比较地址值;equals 没有重写时是比较地址值,重写后一般都是比较值
作者: double_x    时间: 2016-9-13 22:55
Toxicant 发表于 2016-9-12 23:19
如果没重写equals的时候,equals比较的也是地址值

恩恩 受教了
作者: 请叫我院长    时间: 2016-9-13 22:58
看了上面的答案,受益匪浅啊
作者: quicksand007    时间: 2016-9-20 08:36
家有女王叫萌萌 发表于 2016-9-13 09:24
* ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据 ...

怎么判断有没有重写equals方法呐?每次都要去看源码么??




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