黑马程序员技术交流社区

标题: 关于字节码的比较 [打印本页]

作者: zhrnghgwsws    时间: 2014-5-23 13:32
标题: 关于字节码的比较
问题://if(field.getType().equals(String.class))
//对于字节码的比较用==,用equals也能比,但不科学。因为字节码只有一份。
当时老师是这样讲的。
之前我的理解是==用于比较栈内存中数据,而equals是用于比较堆内存的数据,
那么关于此题中的==和equals,的区别用法,总感觉理解起来比较别扭。
想问一下各位大神门是怎么理解的?
作者: gentleman    时间: 2014-5-23 14:17
Object类中的
equals 方法在非空对象引用上实现相等关系:
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。


总结:Object中的equals比较内容是否相同
           ==比较 的是是否是同一个对象,也就是比较的是两个对象的地址


equals为true时,==不一定为true


作者: zhrnghgwsws    时间: 2014-5-23 14:53
看到有点晕。。
作者: stream    时间: 2014-5-23 14:56
==内部不就是调用原始的equal么
作者: faith    时间: 2014-5-23 15:19
== 内存地址做比较  equals 内存中的内容  进行比较
作者: pandapan    时间: 2014-5-24 23:40
给同学打一个比喻吧,
比如说,上体育课,第一次排队,你站在第一个位置,第二次排队,你站在第三个位置,那么按照equals方法来讲的话,其实都是你本人,因为实质没有发生变化,因而用equals判断,你还是你.
而如果用==比较呢,你就不相等了,因为你两次课站在不同的位置,这就是==,比较的是你站在内存中的地址是否相同
作者: woshihq    时间: 2014-5-25 00:08
总之,我觉得==实际上是比较变量的地址,而equals是比较变量的内容,接下来就看你要比较什么再用了
作者: java木    时间: 2014-5-25 00:18
学习了,都是高手啊
作者: hzhzhen    时间: 2015-5-26 07:43
==是比较两个地址值是否相等  equals比较的是内容是否相等




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