【问题标题】:Does order of compared literals matter if both are evaluated? [duplicate]如果两者都被评估,比较文字的顺序是否重要? [复制]
【发布时间】:2015-06-01 08:19:50
【问题描述】:

我有一个相当愚蠢的问题。关键是,我经常看到这样的if 声明:

private int smth;
// ...
if (3 == smth)
    // ...

我觉得这个顺序很奇怪。我什至认为它会降低代码的可读性。

在if 语句中按一定顺序使用二元运算符相互比较的文字有什么好处吗?

【问题讨论】:

  • 这是从旧的 C 和 C++ 编译器继承而来的习惯,它没有警告if (smth = 3) 中最可能的意外赋值。在 Java 中,这是一件完全没用的事情。
  • @molbdnilo,除非您比较布尔值
  • @AlexR 这在任何语言中都是完全没用的。
  • @Trengot,感谢您的链接,我看到它的唯一优点是它有助于避免由拼写错误引起的编译器时错误,当键入 = 而不是 ==。

标签: java if-statement comparison


【解决方案1】:

将用二元运算符相互比较的文字按一定顺序放入 if 语句中是否有任何好处?

不是在 Java 中,除非你使用布尔值:

if (false == flag)

在那种一种情况中,它可以帮助您避免这种错字:

if (flag = false)

...编译器不会保护您免受伤害(这会将false 分配给flag,并且永远不会评估为真)。

在所有其他情况下(任何不是boolean),Java 编译器都不会让您犯这种错误。当然,在测试布尔值时,最好只测试布尔值:

if (!flag)

或

if (flag)

取决于您要寻找的价值。

【讨论】:

    【解决方案2】:

    不,唯一不同的情况是使用 equals 比较对象。

    if(obj != null && obj.equals("foobar")) 对比 if("foobar".equals(obj))

    通过使用反转方式,您可以避免空检查。由于1.7,您可以只使用Objects.equals(obj, "foobar");。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多