在Java中使用.equals方法的正确方法是什么?

我正在和我的CompSci教授交谈,他建议将所有String .equals方法写成:

 "Hello World".equals(fooString); 

而不是:

 fooString.equals("Hello World"); 

这两行都编译,但我想知道第一种方式有什么好处? 我总是以后一种方式做到这一点。 这是错的吗? 什么是常见/常规?

第一种方法可确保在执行比较时不会收到NullPointerException 。 当您尝试在不存在的对象上调用方法时,抛出(发生)此exception。

下面有点相关切线:自己风险

但是,作为一个注释,我很少,实际上看到了合法生产环境中使用的这种技术或编码风格。 有两个原因。

首先,在您的变量包含null的情况下,您编写的程序几乎总是希望做一些特殊或不同的事情。 这是因为它通常表示代码function的某些其他部分中的错误或需要解决的特殊情况。 因此,在对象(在本例中为String fooString进行任何比较或方法调用之前 ,应始终进行空检查。

其次, fooString.equals("Hello World")只是让你的代码更具可读性。 代码中第一种技术的逻辑意义需要几秒钟才能正确处理,当您浏览数百或数千行代码时,很容易出现判断错误。 这实际上远不如听起来那么简单,因为在工作世界中,往往会有非常庞大和非常古老的程序,这些程序将被那些对它们一无所知的人修补,然后再瞥一眼解决问题。 代码可读性极大地促进了公司执行快速分类和解决长期问题的能力。

第一种方法保证永远不会抛出NullPointerException ,而第二种方法可能会在fooString恰好为null时冒险获取NullPointerException

然而,最终,这一切都归结为要求。 如果需求指定不应该发生null情况,或者应该区别对待,那么以fooString.equals()方式写入( fooString.equals() )可以帮助您检测实现缺陷。 如果你可以将null视为另一种情况,那么第一种方法就可以了。