Nos*_*tap 13 java coding-style
我正在和我的CompSci教授交谈,他建议将所有String .equals方法写成:
"Hello World".equals(fooString);
Run Code Online (Sandbox Code Playgroud)
而不是:
fooString.equals("Hello World");
Run Code Online (Sandbox Code Playgroud)
这两行都编译,但我想知道第一种方式有什么好处?我总是以后一种方式做到这一点.这是错的吗?什么是常见/常规?
nha*_*tdh 18
第一种方式保证NullPointerException永远不会抛出,而第二种方式可能会冒险获得,NullPointerException如果fooString碰巧null.
然而,最终,这一切都归结为要求.如果要求指定null案例根本不应该发生,或者应该区别对待,那么以第二种方式(fooString.equals())写入可以帮助您检测实现缺陷.如果你可以null视为另一种情况,那么第一种方式就可以了.
ast*_*eri 12
第一种方法可确保在执行比较时不会收到NullPointerException.当您尝试在不存在的对象上调用方法时,抛出此异常(发生).
下面有点相关切线:自我风险
但是,作为一个注释,我很少,实际上看到了合法生产环境中使用的这种技术或编码风格.有两个原因.
首先,在您的变量包含null的情况下,您编写的程序几乎总是希望做一些特殊或不同的事情.这是因为它通常表示代码功能的某些其他部分中的错误或需要解决的特殊情况.因此,在对对象(在本例中为您的对象)进行任何比较或方法调用之前,应始终进行空检查String fooString.
其次,fooString.equals("Hello World")只是倾向于使您的代码更具可读性.代码中第一种技术的逻辑意义需要几秒钟才能正确处理,当您浏览数百或数千行代码时,很容易产生判断错误.这实际上远不如听起来那么简单,因为在工作世界中,往往会有非常庞大和非常古老的程序,这些程序将被那些对它们一无所知的人修补,然后再瞥一眼解决问题.代码可读性极大地促进了公司执行快速分类和解决长期问题的能力.