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"))