在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
视为另一种情况,那么第一种方法就可以了。