Boh*_*ian 2 java language-agnostic if-statement coding-style
有些人,通常是那些来自C背景的人,为他们的测试编码null如下:
if (null == someVar)
Run Code Online (Sandbox Code Playgroud)
相信"正常"的风格
if (someVar == null)
Run Code Online (Sandbox Code Playgroud)
可能会被意外编码为
if (someVar = null)
Run Code Online (Sandbox Code Playgroud)
这会在不经意间分配一个null,而不是测试了null.
但是,如果发生错误编码等if (someVar = null):
someVar可以是BooleanNullPointerException
为什么这些人都没有意识到"防御性"(即螺旋球)的风格根本没有帮助,因为误编码既不会编译也不会运行!?
顺便说一句,作为性能问题,编码if (null == someVar)实际上执行起来要慢一些 - 一条指令要慢一些.原因是null必须将其推入堆栈进行比较,而"普通"样式使用特殊的"is null"指令.
我知道......不是一个问题.更多的咆哮.但是我想把它放在那里.如果你也相信他们"不那么富有洞察力",那么就要投票.
但是,如果你知道答案,我想听听.
因为他们从C带回了这个习惯,在那里
if (someInteger = 0)
Run Code Online (Sandbox Code Playgroud)
是有效的代码,因为C没有布尔值,只有整数(0表示假,其他整数都是真).
if (somePointer = NULL)
Run Code Online (Sandbox Code Playgroud)
也是有效的,因为在C中,NULL为0.
所以,在C中,这个结构是有意义的.
请注意,在Java中,执行此操作时也会发生此错误
if (b = true)
Run Code Online (Sandbox Code Playgroud)
代替
if (b == true)
Run Code Online (Sandbox Code Playgroud)
当然,一个优秀的Java开发人员永远不会写上面的内容,但会使用
if (b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |