黑马程序员技术交流社区
标题:
关于字节码的比较
[打印本页]
作者:
zhrnghgwsws
时间:
2014-5-23 13:32
标题:
关于字节码的比较
问题://if(field.getType().equals(String.class))
//对于字节码的比较用==,用equals也能比,但不科学。因为字节码只有一份。
当时老师是这样讲的。
之前我的理解是==用于比较栈内存中数据,而equals是用于比较堆内存的数据,
那么关于此题中的==和equals,的区别用法,总感觉理解起来比较别扭。
想问一下各位大神门是怎么理解的?
作者:
gentleman
时间:
2014-5-23 14:17
Object类中的
equals 方法在非空对象引用上实现相等关系:
自反性
:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性
:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性
:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性
:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
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