Как отобразить, изменились ли два объекта String или нет? - PullRequest
1 голос
/ 19 декабря 2010

Я хочу показать, изменились ли два объекта String или нет. Как вы думаете, следующий код? Мне кажется, это не так плохо. Но мне интересно, может ли другой подход быть более изощренным?

EXPECTED RESULT
--------------------------
1:changed
2:changed
3:changed
--------------------------

package com.javastudy;

public class StringCompareBeforeToAfter {

 private static boolean isChanged(String before, String after) {
  if(before != null && after == null || before == null && after != null){
   return true;
  }
  if(before != null && !before.equals(after)){
   return true;
  }
  return false;
 }

 public static void main(String[] args) {

  String before1 = null;
  String after1 = "a";

  if(isChanged(before1, after1)){
   System.out.println("1:changed");
  }

  String before2 = "a";
  String after2 = null;

  if(isChanged(before2, after2)){
   System.out.println("2:changed");
  }

  String before3 = "a";
  String after3 = "b";

  if(isChanged(before3, after3)){
   System.out.println("3:changed");
  }

  String before4 = null;
  String after4 = null;

  if(isChanged(before4, after4)){
   System.out.println("4:changed");
  }

  String before5 = "a";
  String after5 = "a";

  if(isChanged(before5, after5)){
   System.out.println("5:changed");
  }
 }

}

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Или даже короче.

public static boolean isEquals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

public static void main(String... args) {
  String[][] beforeAfter = {
    { null, "a" },
    { "a", null },
    { "a", "b" },
    { null, null },
    { "a", "a" },
  }

  for(String[] test: beforeAfter) 
    System.out.println("isEquals("+test[0]+","+test[1]+")= "
                      + isEquals(test[0], test[1]));
}
3 голосов
/ 19 декабря 2010

Это кажется немного проще

private static boolean isChanged(String before, String after) {
    if (before == null) {
        return after == null;
    } else {
        return before.equals(after);
    }
}

Вы также можете изменить подпись на объекты и использовать метод в общем случае.

...