Java 空校验编码标准

Java 空校验编码标准,java,coding-style,Java,Coding Style,可能的重复项: 大多数开发人员都习惯于在左手边用null编写null检查 if(null == someVariable) 这有什么帮助吗?据我所知,这影响了代码的可读性。在“过去”C编译器不会抱怨缺少=时,当需要=时,它会起到帮助作用: // OOps forgot an equals, and got assignment if (someVariable = null) { } 任何现代C#/Java/C++/C编译器都应该发出警告(希望是错误) 就我个人而言,我发现 if (s

可能的重复项:

大多数开发人员都习惯于在左手边用null编写null检查

if(null == someVariable)

这有什么帮助吗?据我所知,这影响了代码的可读性。

在“过去”C编译器不会抱怨缺少
=
时,当需要
=
时,它会起到帮助作用:

// OOps forgot an equals, and got assignment
if (someVariable = null) 
{
}
任何现代C#/Java/C++/C编译器都应该发出警告(希望是错误)

就我个人而言,我发现

if (someVariable == null) 
{
}

比从
null

开始更具可读性不,它在Java中没有任何用途

在C语言及其一些相关语言中,有时使用它来避免犯这种错误:

if (someVariable = null)
注意
=
而不是
=
,作者无意中将
null
赋值给
某个变量
,而不是检查
null
。但这将导致Java中的编译器错误

即使在C语言中,任何现代编译器都可以选择将if(someVariable=null)视为警告(甚至错误)


从风格上讲,我同意你的观点——我不会说“如果你21岁,我会给你一杯饮料”(除非我已经喝了几杯,并且正在模仿尤达)。请注意,那是英语;据我所知,它在其他语言中是完全有意义的,在这种情况下,它对于那些语言的使用者来说是完全合理的风格。

在你的情况下,我认为这样做没有任何好处。但是我更喜欢下面的

if("a string".equals(strVariable))
{
}
在这件事上

if(strVariable != null && strVariable.equals("a string"))
{
}

可能重复:它被称为“尤达条件”!:你的意思是,“尤达条件,它的名字。”“大多数开发者”。真正地证据?@EJP:是的,我很少看到。也许是他组织中的大多数开发者(谈到C和C++编译器):一个错误,而不是警告?@ T.J. Crowder -是的,它在合同中定义。在您提供的链接中:“对于任何非空参考值x,x.equals(null)应返回false。”@T.J.Crowder&@Cowan,是的,我追溯到JDK 1.1.1,它在合同中有定义@考恩和罗斯迪:我不敢相信这些年来我都错过了。谢谢我已经删除了前面的评论。证明你永远不会停止学习。如果这些文档需要重新编写,那么所有不必要的“for any non-null x”重复完全掩盖了其余的要点。不幸的是,这些年来,我遇到了相当多的
equals
的违约实现:-(@TJCrowder,如果说它在java中没有任何用途,那就有点错误了。
someVariable
是一个
Boolean
,它不会抛出编译错误……:)你需要把它去掉……否则java会帮你清理掉。:)@斯图勒:哇,我惊讶地发现你说的对。我不知道(并且已经检查过了)。非常感谢。但我要反驳的是:不要那样测试布尔值,如果(someVariable==true),没有任何意义,只要使用
if(someVariable)
(当然还有
!someVariable
,而不是比较
false
)。(事实上,你可能会有一个不经意的任务支持使用这种风格。)我唯一会使用
=
的时候=将是无效的,并且构造在这方面对我没有帮助。:-)@TJCrowder,当然,并没有一个像样的java程序员会真正使用它……我只是抛出了一个异常,用双关语来说;)@是的,再次谢谢你。当我为它编写一个测试用例并通过时,我感到非常惊讶。:-)