aio*_*obe 67

(与此问题类似:null == object和object == null之间的区别)

我会说这两个表达式之间的性能完全没有区别.

然而有趣的是,编译后的字节码(由OpenJDKs javac发出)对于这两种情况看起来有点不同.

用于boolean b = variable == null:

 3: aload_1               // load variable
 4: ifnonnull 11          // check if it's null
 7: iconst_1              // push 1
 8: goto 12           
11: iconst_0              // push 0
12: istore_2              // store
Run Code Online (Sandbox Code Playgroud)

用于boolean b = null == variable:

 3: aconst_null           // push null
 4: aload_1               // load variable
 5: if_acmpne 12          // check if equal
 8: iconst_1              // push 1
 9: goto 13
12: iconst_0              // push 0
13: istore_2              // store
Run Code Online (Sandbox Code Playgroud)

正如@Bozho所说,variable == null是最常见,默认和首选的风格.

然而,对于某些情况,我倾向于把它null放在前面.例如,在以下情况中:

String line;
while (null != (line = reader.readLine()))
    process(line);
Run Code Online (Sandbox Code Playgroud)

  • 不。:)(我仍然想知道为什么这个答案没有得到更多的支持..) (2认同)

Edw*_*ale 18

这被称为"尤达条件",目的是防止您意外使用赋值(=)而不是相等检查(==).


Boz*_*zho 16

没有不同.

if (variable == null) (imo)是一种更好的编程风格.

请注意,nullJava 中是小写的.

  • @b.roth // 找不到页面。可悲。 (3认同)
  • 是的我同意.`if(null == variable)`将是Yoda风格:)在这里解释:http://stackoverflow.com/questions/2349378?tab = votes&page = 1 #tab-top (2认同)

dfe*_*ens 12

没有不同

(null == variables) 有时用于旧时代(C语言)以避免写作: (variable = NULL)错误


pol*_*nts 8

简短的回答:没有区别.

更长的答案:存在相当主观的风格差异.有些人认为常数应该在左侧的防守风格,以防万一你输错===.有些人认为常量应该是正确的,因为它更自然,更易读.

设计良好的语言与良好的编译器和静态分析工具相结合,可以最大限度地减少偏执,因此您应该编写最可读和最自然的代码,这将是右侧的常量.

相关问题

请在下次使用搜索功能.

  • 好收藏:) (2认同)

Rob*_*ert 7

第一个是从C挂起,写作是完全合法的 if(variable = NULL)

  • 这不是真的:null不是boolean类型,所以它不合法 (5认同)

Rob*_*ian 6

从性能的角度来看,没有实质性的区别。

但是……如果您打错了字并错过了一个等号字符怎么办?

foo = null; // assigns foo to null at runtime... BAD!
Run Code Online (Sandbox Code Playgroud)

相对

null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep
Run Code Online (Sandbox Code Playgroud)

这是支持在左侧使用 null 开始 if 测试的一个论点。

支持以 null 开始 if 测试的第二个论点是,代码的读者非常清楚他们正在查看 null 测试,即使等号右侧的表达式很冗长。

@aiooba 也指出了第二个论点:

但是,对于某些情况,我倾向于将 null 放在前面。例如在以下情况下:

String line;
while (null != (line = reader.readLine()))
    process(line);
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

73544 次

最近记录:

7 年 前