使用Java的三元运算符,将变量赋值给自身有什么含义?
Using Java's ternary operator, what's the implication of assigning a variable to itself?
我过度使用三元运算符,有时甚至用它代替非常简单的 if 语句。例如,我刚刚发现自己替换了这样的东西:
if (foo != null) {
bar = foo;
}
有了这个:
bar = (foo == null) ? bar : foo;
虽然哪个读起来更好是一个品味问题,但我想知道:
- 这样的话,三元版本的性能是不是更差了?
- 还有其他理由反对在这里使用三进制吗?
我认为这里的性能可能更差的原因是我假设编译器无法针对 foo
为 null
的情况优化三元。因此,bar
的值可能会再次设置为相同的值,浪费了一些 CPU 时间,而简单的 if
语句永远不会到达那个点。但是我对编译器和执行的了解有限,所以才有这个问题。
如果你担心风格,你至少应该去掉括号噪音:
bar = foo == null ? bar : foo;
至于性能,在 foo
为空的情况下,您有一个不必要的赋值。大不了。你说的是纳秒。
不用担心 "performance" 这个微不足道的差异。担心可读性,这个更重要。
在这种情况下,我发现 if
版本更具可读性:
if (foo != null) {
bar = foo;
}
代码的意图很清楚。
我过度使用三元运算符,有时甚至用它代替非常简单的 if 语句。例如,我刚刚发现自己替换了这样的东西:
if (foo != null) {
bar = foo;
}
有了这个:
bar = (foo == null) ? bar : foo;
虽然哪个读起来更好是一个品味问题,但我想知道:
- 这样的话,三元版本的性能是不是更差了?
- 还有其他理由反对在这里使用三进制吗?
我认为这里的性能可能更差的原因是我假设编译器无法针对 foo
为 null
的情况优化三元。因此,bar
的值可能会再次设置为相同的值,浪费了一些 CPU 时间,而简单的 if
语句永远不会到达那个点。但是我对编译器和执行的了解有限,所以才有这个问题。
如果你担心风格,你至少应该去掉括号噪音:
bar = foo == null ? bar : foo;
至于性能,在 foo
为空的情况下,您有一个不必要的赋值。大不了。你说的是纳秒。
不用担心 "performance" 这个微不足道的差异。担心可读性,这个更重要。
在这种情况下,我发现 if
版本更具可读性:
if (foo != null) {
bar = foo;
}
代码的意图很清楚。