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

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

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

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

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

例如,考虑在servlet中获取此var

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

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

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

 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 } 

我不会使用(“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"; } }