質問: 下記のような実装についてうまい修正方法を教えていただきたいです ``` private boolean isChange(String oldStr, String newStr){ if(StringUtils.isEmpty(oldStr)){ if(StringUtils.isEmpty(newStr)){ return true; }else{ return false; } } else if (StringUtils.isEmpty(newStr)){ return true; } if(!oldStr.equals(newStr)){ return true; } return false; } ```
回答: > > 下記のような実装についてうまい修正方法を教えていただきたいです > > > isChangeのメソッド名から、新旧に変動があった場合はtrue、変動がなかったらfalseを返すメソッドを作りたいのだと勝手に解釈しました。 以下はコードの修正例です。StringUtilsは使っていません。 `null`と`""`空文字列を同一視しません。`null`から`""`に変化する場合、その逆も変動したと判定します。 ``` private boolean isChange(String oldStr, String newStr) { if (oldStr == null && newStr == null) { return false; //変動なし } else if (oldStr == null || newStr == null) { return true; //変動あり } else if (newStr.equals(oldStr)) { return false; //変動なし } else { return true; //変動あり } } ``` metropolisさんのコメントを参考に`StringUtils`を調べてみました。 次のコードは`null`と`""`空文字列を同一視します。`null`から`""`に変化する場合、その逆も変動なしと判定します。 ``` if (StringUtils.isEmpty(oldStr) && StringUtils.isEmpty(newStr)) { return false; } else if (StringUtils.equals(oldStr, newStr)) { return false; } else { return true; } ``` 次のコードは`null`と`""`空文字列を同一視しません。`null`から`""`に変化する場合、その逆も変動ありと判定します。 ``` private boolean isChange(String oldStr, String newStr) { return !StringUtils.equals(oldStr, newStr); } ```