== 和 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 。
本文来自博客园,作者:走马!,转载请注明原文链接:https://www.cnblogs.com/zou-ma/p/16101632.html
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术