equal是比较值的 ==是比较地址的 那!=是比较值还是比较地址呀 突然有点晕,谁能帮我解答一下,谢谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了equal是比较值的 ==是比较地址的 那!=是比较值还是比较地址呀 突然有点晕,谁能帮我解答一下,谢谢!相关的知识,希望对你有一定的参考价值。

参考技术A 没看懂你说的话。。。
equal
adj. 平等的;相等的;胜任的
vt. 等于;比得上
n. 对手;匹敌;同辈;相等的事物

equal to相等;敌得过;胜任;担得起
参考技术B 都是比较地址的。
在Java里,equals()是比较值的。本回答被提问者采纳

关于重写equals和hashCode

  1. 什么时候需要重写equals和hashCode方法

    在比较两个对象的内容的时候,需要重写这两个方法。java系统本身提供的(==)比较方法,有两种情况:

    1.比较的是基本类型数据,则此时== 跟equals的效果一致,此时比较的是2个值的大小。例如 

    2.比较的是对象的引用,则此时==跟equals比较的是2个引用的内存地址是否一致。

    这里插入一些对象和对象的引用这个知识点,

    Student stu=new Student("学生A");  语句1

    有人会说,stu就是Student类的实例,就是对象,那么再看下面

    Student stu;

    stu=new Student("同学B");

    我们都知道对象的创建new Student是在堆栈上创建的,因此stu并不是一个对象,stu是一个对象的引用,他指向new Student("同学B")这个对象


    看到这里,我们清楚了 当我们在比较2个对象的内容的时候,如果直接用系统默认的equals方法,则会直接比较的2个对象引用是否指向同一个对象(即2个对象的内存地址是否一致),这与我们的实际需求是有区别的;比如2个Student实例,他们都有身高、年龄、名字,我们现在只需要他们2个的名字和年龄一致即认为他们是同一个实例,那么用系统自带的equals方法时则无法比较成功,如果我们重写equals则可以按照我们的要求进行对象的内容比较。


当我们自定义的一个类,想要把它的实例保存在集合中时,我们也需要重写这两个方法;集合(Collection)有两个类,一个是List,一个是Set


2.重写equals的同时也要重写hashCode方法?

    equals与hashCode的关系:

      如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;
      如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)  ;

比较的时候是先对hashCode进行比较,如果hashCode不一致,那么2个对象不相同;如果hashCode一致,则再进行equals进行比较。为什么要这样做呢? 因为hashCode的比较效率很高。


3.关于equals方法的几个比较

    if(this==obj),this指的是当前对象,==比较的是2个对象的引用的内存地址,如果比较对象跟当前对象的内存地址一致,则2个对象是相同的。

    if(null==obj),如果被比较对象为null,则2个对象不相同,2个null对象不是相同的

  

本文出自 “12257285” 博客,请务必保留此出处http://12267285.blog.51cto.com/12257285/1929447

以上是关于equal是比较值的 ==是比较地址的 那!=是比较值还是比较地址呀 突然有点晕,谁能帮我解答一下,谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

java equals和==的区别

equals是啥意思

作业题27

“==”和equals()那些事

java中字符串比较==和equals

Object