equals()方法和==的区别【图文教程】

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!

equals()方法和==的区别【图文教程】

1 equals()和==的区别

(1)==:比较的是内存中的地址是否相同。

(2)equals():该方法根据不同的类的实现方式(重写Object的equals()方法)有不同的含义,重写父类Object方法的话就按照自己的定义来,没有重写的话就是跟==相同。

2 Object类的equals()和hashCode()方法

      提到equals()方法,就必须介绍下与其相搭配的hashCode()方法!

      我们知道在 Java 语言中object是所有类的父类,所有的类默认继承object类,这个继承关系是在java 编译器编译的时候实现的继承。

我们的类定义:

public class DemoClass{

     ..........

}

在编译器编译后会变成:

public class  DemoClass  extends Object{

     ..........

}

      在父类object中有两个方法分别是hashCode()和equals()方法,因此子类DemoClass中就继承了父类的这两个方法!

 

2.1 Object类的hashCode()方法

      hashcode方法(C语言方法,返回地址指针值):

      native关键字是本地的意思,就是说hashcode()是一个本地方法,由于java不直接操作内存地址指针,表明hashcode()是一个C语言实现的方法,意思是返回内存上存储位置的指针值。

 

2.2 Object类的equals()方法

      equals()方法:

 

      通过代码源码我们可以看到,父类object中的equals()方法实际上就是==,实现类(如:String.class、Integer.class等)如果没有重写父类的equals()方法,那么equals方法就是==。然而事实上,String.class、Integer.class等java提供的类都重写了Object父类的equals()方法!

      下一章将详细讲解String.class类重写的equals()和hashCode()方法,以及我们自定义类并重写equals()和hashCode()方法时需要注意的,否则会在工作中经常遇到Set集合不能去重、HashMap集合频繁hash碰撞等问题! 搜索【IT特靠谱】或扫码关注微信公众号来一起学习吧~

猜你喜欢

转载自blog.csdn.net/IT_Most/article/details/108950549
今日推荐