美文网首页
"=="和 equals()方法的区别

"=="和 equals()方法的区别

作者: SuperMarry | 来源:发表于2018-07-27 00:42 被阅读0次

    简述

             "=="操作符专门用来比较两个对象的值是否相等,即用于比较变量所对应的内存中的数值是否相等。

             equals()是用于比较两个独立对象的内容是否相同。

    根据上面的简述,我们来看一段代码。

    按照上面对==和equals的简述,equals比较的是对象的内容是否相等,我们可以看到p1和p2的id都为1,username都为老李,所以对象的内容是应该是相等的。==比较的是内存中所存储的值是否相等,如果一个变量指向的数据是对象类型的,这时候就涉及到了两块内存,变量占一块内存,对象也占一块内存,即p1是一块内存,new People(xxx)又是一块内存,此时变量内存中存储的是另外一块内存,如果p1和p2相等,那就等于两次new开辟出来的是同一块内存,这显然是错误的。我们来看下程序的运行结果

    怎么回事?按照上面的分析,equals验证的应该要相等才对,怎么变成这样呢?

    我们来看看People的实现

    原来是因为People没有实现自己的equals()方法,它默认的equals()方法是从Object中来的,我们来看下它的源码:

               public boolean equals(Object obj) {

                               return (this ==obj);

                     }

    其内部就相当于调用==操作符,所以输出的是false。

    那我们要怎么重写equals()方法,才能使p1==p2为true呢?我们来看下具体的代码。

    相关文章

      网友评论

          本文标题:"=="和 equals()方法的区别

          本文链接:https://www.haomeiwen.com/subject/lhnimftx.html