为什么用Java,(" string")。equals(var)推荐除(var).equals(" string")之外?

时间:2014-06-06 09:10:19

标签: java

我见过大多数情况下开发人员使用第一个字符串,然后在.equal操作中使用该变量。是什么原因?

5 个答案:

答案 0 :(得分:9)

因为var可以是null而var.equals(“string”)将抛出NullPointerException(尝试在null上调用方法)。另一方面,"string".equals(null)将返回false。

答案 1 :(得分:4)

  

为什么在Java中,(“string”)。equals(var)推荐的除了(var).equals(“string”)?

这是因为你不确定var指向什么。它很可能是null,因为你可能会得到NPE,这会杀死你当前的线程。所以第二种方法是首选,因为(“string”).equals(var)返回false。

例如,考虑在servlet中获取此变量

String var = request.getParameter("myvar");
if(var.equals("myVarValue")) {
//do something
}

如果你的请求中没有参数,这将抛出NPE。

答案 2 :(得分:3)

因为如果var为null,则不会引发NullPointerException。

答案 3 :(得分:3)

public static void badOne() {
    String s = null;
    System.out.println(s.equals("abc"));
    // This function will throw null pointer
}

public static void goodOne() {
    String s = null;
    System.out.println("abc".equals(s));
    // This will print false
}

答案 4 :(得分:1)

我不会使用(“string”)。equals(var),因为它可能表明程序员不知道var是否为null。我会记录var是否可以为null并检查它。

示例:

String makeAString(@NonNull String aStringValue) {
    Validate.notNull(aStringValue, "aStringValue must not be null");
    if (aStringValue.equals("abcde") {
       return "fg";
   } else {
       return "de";
   }
}

String makeAString(@Nullable String aStringValue) {
    if (aStringValue == null) {
       return "kl";
    }
    if (aStringValue.equals("abcde") {
       return "fg";
    } else {
       return "de";
    }
}