使用Java的三元运算符,将变量赋给自身的含义是什么?

时间:2016-07-05 20:19:26

标签: java performance variables variable-assignment ternary

我过度使用三元运算符,有时甚至用它替换非常简单的if语句。例如,我发现自己更换了这样的东西:

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

用这个:

bar = (foo == null) ? bar : foo;

虽然这是一个味道更好的问题,但我想知道:

  • 在这种情况下,三元版本的性能会更差吗?
  • 这里是否还有其他原因反对使用三元?

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

1 个答案:

答案 0 :(得分:3)

如果你担心风格,你应该至少删除支架噪音:

bar = foo == null ? bar : foo;

至于性能,在foo为空的情况下,您将进行不必要的分配。很重要。你在谈论纳秒。

不要担心“表现”这种微不足道的差异。担心可读性,这更重要。

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

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

很清楚代码的意图是什么。