平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从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特靠谱】或扫码关注微信公众号来一起学习吧~