关于Java的equals方法

在今天的工作中,把在实施审核中提出的问题记录下来作为备忘录。

我觉得这对于经验较浅或者主要实现的是旧版本(8及以前)的人来说也是有益的。

String类的equals方法。

如果你是一个对Java了解不深或最近开始学习的人,我认为在学习字符串比较时,应该以String类的equals方法为基础。
(我在培训和自学阶段也只学了这一种方法,现在还会出于习惯使用它。)


String类的equals方法可以判断两个字符串是否相等。
因此,即使引用不同,它也会返回true。

String a = "あいう";
String b = "あいう";
String c = new String("あいう");

System.out.print(a.equals(b));//true
System.out.print(a.equals(c));//true




如果存在可能为null的情况,则必须进行null判断。

在实际工作中,我觉得需要非常考虑 null 的情况。
如果变量可能会出现 null 值,那么我们必须进行 null 检查或者使用允许 null 的实现。

举例来说,在以下情况下会发生空指针异常。

String a = null;
String b = "あいう";

System.out.print(a.equals(b));//ヌルポで落ちます

由于可能发生故障,因此对可能为空的变量需要进行空值检查。

String a = null;
String b = "あいう";
if (a!=null) {
  System.out.print(a.equals(b));//実行されない
}

使用 Objects 类的 equals 方法

每次都进行null检查很麻烦。

每次在if语句中进行null检查的行为会导致if语句的嵌套,降低了可读性。

因此,我目前正在努力避免问题,例如使用Optional类型,并且在这种情况下,我使用了Objects类的equals方法。

String a = null;
String b = "あいう";
String c = null;

System.out.print(a.equals(b)); // false
System.out.print(a.equals(c)); // true

Objects类的equals方法是一个很好的方法,可以比较两个null对象,不会导致NullPointerException的发生。

如果变量可能为空,我们希望养成使用这个习惯。

bannerAds