我见过大多数情况下开发人员使用第一个字符串,然后在.equal
操作中使用该变量。是什么原因?
答案 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";
}
}