关于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的发生。
如果变量可能为空,我们希望养成使用这个习惯。