日期:2014-05-20  浏览次数:20702 次

关于“==”与“equals”在Object类中的疑问
public   void   actionPerformed(ActionEvent   e)
{
Object   obj=e.getSource();
if(obj==userButton)                 //userButton为一JButton类型
{
                                          ...........
一般==用于比较数值类型变量或字符串,equals用于比较引用类型的变量
请问这里为什么可以用==?
btw:据悉“==”的效率比“equals”高很多,能用==的地方最好用。
btw2:本程序编译成功,运行正常,就是不明白这里==的用法。
请高人指点。




------解决方案--------------------
你想,当事件发生,你的函数被调用时,Java标准库的实现者们至于从原来的Button克隆一分新的Button给你吗?——那效率要低到什么地步啊?
他们肯定就是把你原来的Button的那用直接给传进来了,因此直接用==比较引用即可,是便是,不是便不是。
另外Button类似乎也没有重写equals吧,即使用equals,调用的也是Object.equals,效果一样。

这个不像String,String类型有明却的“值”的含义,比如你从某磁盘文件读入一个字符串s1,又从网络上接收了字符串s2,现在它们俩的引用肯定不会相等,你要比较内容是否相等,只有用equals了。
------解决方案--------------------
这个问题~~~
在object类里面,如果没有重写equals方法,那么==跟equals是一样的,比较的都是内存地址。
如果重写了equals方法,则==和equals不一样。一个前者比较内存地址,后者比较内容。
原始类型的包装类以及String类都重写了equals方法,所以equals比较内容。
还是不明白,请查API