使用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;

虽然哪个读起来更好是一个品味问题,但我想知道:

我认为这里的性能可能更差的原因是我假设编译器无法针对 foonull 的情况优化三元。因此,bar 的值可能会再次设置为相同的值,浪费了一些 CPU 时间,而简单的 if 语句永远不会到达那个点。但是我对编译器和执行的了解有限,所以才有这个问题。

如果你担心风格,你至少应该去掉括号噪音:

bar = foo == null ? bar : foo;

至于性能,在 foo 为空的情况下,您有一个不必要的赋值。大不了。你说的是纳秒。

不用担心 "performance" 这个微不足道的差异。担心可读性,这个更重要。

在这种情况下,我发现 if 版本更具可读性:

if (foo != null) {
    bar = foo;
}

代码的意图很清楚。