关于Java的equals方法


//(~省略~)

// 正しい例
private final String 定数1 = "hogehoge";
private String 変数1 = null;

if(定数1.equals(変数1)){
    System.out.println("同じ値です");
}else{
    System.out.println("違う値です");
}

// nullPointExceptionは発生せずに、「違う値です」が出力される。

// 悪い例
private final String 定数1 = "hogehoge";
private String 変数1 = null;

if(変数1.equals(定数1)){
    System.out.println("同じ値です");
}else{
    System.out.println("違う値です");
}

// nullPointExceptionが発生する。

像上面所述的那样,在equals方法中比较常量和变量时,最好将常量放在前面进行记录。这是在代码审查中被指出的问题。

有读者在评论中指出,为了避免出现 nullPointerException,应该添加明确检查 null 值的处理步骤,因此我想要进行如下修改。


//(~省略~)

// 正しい例(nullチェックを追加)
private final String 定数1 = "hogehoge";
private String 変数1 = null;

if(変数1 != null){
    if(定数1.equals(変数1)){
        System.out.println("同じ値です");
    }else{
        System.out.println("違う値です");
    }
}else{
    System.out.println("nullです");
}

// nullPointExceptionは発生せずに、「nullです」が出力される。

// nullチェックを行って改善した例
private final String 定数1 = "hogehoge";
private String 変数1 = null;

if(変数1 != null){
    if(変数1.equals(定数1)){
        System.out.println("同じ値です");
    }else{
        System.out.println("違う値です");
    }
}else{
    System.out.println("nullです");
}
// nullPointExceptionが発生せずに、「nullです」が出力される。

广告
将在 10 秒后关闭
bannerAds