• equals与==判断相等


    一、==

    == 判断相等,判断的是物理地址相等。

    二、equals 判断相等

    equals 与hashCode 都是Object的方法。

    所有的类都继承于Object,如果不重写equals。equals判断相等,底层也是使用==来判断物理地址相等。

    1. public boolean equals(Object obj) {
    2. return (this == obj);
    3. }

    与equals伴随的是hashCode方法。(hashCode也是Object的方法)

     public native int hashCode();

    hashCode返回的不是地址值,而是与地址相关的一个值,它也是唯一的,地址发生改变,hashCode码也会发生变化。

    2.1 自定义类,equals判断相等

    我们自定义了一个类,要求:如果2个对象的属性的值相等,则这两个对象就相等,需要重写equals方法

    自定义类,相等判断(根据属性的值),重写equals

    1. class Man{
    2. private String name;
    3. public Man(String name) {
    4. this.name = name;
    5. }
    6. @Override
    7. public boolean equals(Object o) {
    8. if (this == o) return true;
    9. if (o == null || getClass() != o.getClass()) return false;
    10. Man man = (Man) o;
    11. return Objects.equals(name, man.name);
    12. }
    13. @Override
    14. public int hashCode() {
    15. return Objects.hash(name);
    16. }
    17. }

    2.2 hashCode 

    hashCode 如果不重写,则调用Object的hashCode 方法

     public native int hashCode();

    hashCode 与equals总是成对出现,java规范,如果两个对象通过equals判断相等, hashCode应该返回相同的哈希code码

    三、String字符串判断相等

    1. // 方式一
    2. String name = "acd";

    这个产生的数据,在jvm的常量池中。

    1. // 方式二
    2. String name1 = new String("acd");

    这种方式,产生的数据,存放在jvm的堆中。

    做相等判断

    1. System.out.println(name == name1);
    2. System.out.println(name.equals(name1));

    打印结果:

    1. false
    2. true

    ==,判断不相等,因为物理地址不一样,一个在常量池中,一个在堆中。

    equals判断相等,因为字符串重写了equals方法,比较的是具体的值

  • 相关阅读:
    正则表达式
    在Flask中处理后台任务
    matlab 计算机载点云的密度
    青龙面板【常见问题报错】以及【升级方法】
    面试官:vue的这些原理你了解吗?
    Java使用原生API调用第三方接口
    【手把手带你学JavaSE系列】练习项目—图书管理系统
    【数据结构】排序4——选择排序(直接选择排序、堆排序)
    scanf、printf使用详解
    Java 内部类 面试“变态题”
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/127910396