嘚儿驾...

== 和 equals 的坑

在 Java 中,二者都是判断两个数据是否相等!

两者都各有各的应用场景。

先说 ==

对于基本数据类型来说,它比较的是值,

对于引用数据类型来说,它比较的是内存的地址。 (即判断两个引用是否都指向了同一个对象)

Java 只有值传递, 所以对于 == 号来说,比较的都是值,

只是,基本类型,比较的是值本身;引用类型的值,是对象的地址;

== 的坑就是,即使两个对象的属性,完全一样,它们也不相等。

如果要比较对象,只能用 equals 方法了!




equals 方法是 Object 顶层父类中,定义的方法,每个类都能重写该方法,如果没有重写该方法,那 equals 和 == 是等价的。

一般我们都会将自定义的类重写 equals 方法,好来判断,对象的属性是否一致

比如说 String 就重写了 equals 方法,我们用 equals 方法就能得到,我们想要的效果

用 equals 方法要注意空指针异常,

所以,将不会为 null 的对象放前面,可能为 null 的对象放在后面;

如果两个对象都可能为 null,可以用 java 标准库中的工具类,Objects 进行比较,这样就能有效的避免空指针异常。

String s1 = null;
String s2 = new String("张三");

    System.out.println("张三".equals(s1));  // false 正常运行
    System.out.println(Objects.equals(s1, s2));  // false 正常运行
    System.out.println(s1.equals(s2));  // NullPointerException 
    
}

还有个隐蔽的坑
    equals 不能比较基本数据类型,当比较包装类型时,要注意 比较的值,是否和包装类的类型一致。 包装类中重写了 equals 方法。它首先会判断另一个值,是否为统一类型,若不是统一的类型,即使数值虽然相等,也会返回 false 。

posted @   走马!  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示