Java 哪个性能更好:测试!=空或空!=测试

Java 哪个性能更好:测试!=空或空!=测试,java,null,Java,Null,考虑以下两行代码 if (test ! = null) 及 就性能而言,上述两种说法是否存在任何差异?我见过很多人使用后者,当被问到这是一个没有充分理由的最佳实践。第二个对我来说像“Yoda条件”,即如果(2==x)…,可读性就差得多 没有性能差异,但我个人认为第二种类型令人困惑。避免大多数现代IDE会出现的一些基本输入错误是最好的做法,因为有时您希望在不为null的更复杂类型之间进行比较,并最终执行意外赋值。因此模式保持不变,但我从未见过它与性能相关,也从未见过它生成特殊的字节码 其思想是首

考虑以下两行代码

if (test ! = null)


就性能而言,上述两种说法是否存在任何差异?我见过很多人使用后者,当被问到这是一个没有充分理由的最佳实践。

第二个对我来说像“Yoda条件”,即
如果(2==x)…
,可读性就差得多

没有性能差异,但我个人认为第二种类型令人困惑。

避免大多数现代IDE会出现的一些基本输入错误是最好的做法,因为有时您希望在不为null的更复杂类型之间进行比较,并最终执行意外赋值。因此模式保持不变,但我从未见过它与性能相关,也从未见过它生成特殊的字节码

其思想是首先获得静态的已知值,这样在执行比较时就不会抛出任何奇怪的异常

不过,这两种方法都不是“更正确的”,所以完全由您自己决定要使用什么。

没有区别

第二个原因仅仅是因为C/C++中程序员总是进行赋值而不是比较

例如

而java编译器将生成编译错误


所以我个人更喜欢第一个,因为可读性,人们倾向于从左到右阅读,如果test不等于null,那么读作
,而不是
null不等于test
,它们是完全一样的。使用equals时,第二个选项是有意义的:

if("bla".equals(test))
不能抛出
NullPointerException
,而:

if(test.equals("bla")) 

可以。

没有区别。但在第二种方法中,您可以避免像
test=null
这样的输入错误。因为第二种方法会导致编译器错误。

使用后一种方法不是最佳做法。两者是等价的,但前者更容易阅读

这个“最佳实践”来自C语言,其中布尔值不存在。取而代之的是整数,而
if(foo=1)
不是语法错误,但与
if(foo=1)
完全不同


在Java中,if中只能包含布尔表达式,这种做法没有多大意义。

这两种形式之间没有真正的区别。没有性能问题,但有以下注意事项:

  • 第一种形式对于代码阅读器是可读的,因为人们通常从左到右阅读代码
  • 第二种形式更适合代码编写器,因为在java中,运算符用于赋值,
    =
    运算符用于测试等价项,但人们通常在
    if
    语句中使用
    =
    而不是
    =
    ,第二种方法是开发人员得到编译时错误,因为null不能在赋值语句的左侧使用

这是的副本,但此副本正在使用!=类似的问题当我们讨论最佳实践时,您可能希望开始在“if”和“(”)之间添加空格。将这一微小的代码样式更改与java编码约定结合起来,即使是最挑剔的代码审阅者(me)也会变得更挑剔对if语句没有任何说明。这是否回答了您的问题?除非“test”不是java.lang.Boolean类型的对象,否则在第一种情况下也会出现编译器错误。object test=null;if(test=null){//不编译。无法将对象转换为Boolean}
if("bla".equals(test))
if(test.equals("bla"))