如果两者都被评估,比较文字的顺序是否重要?

Does order of compared literals matter if both are evaluated?

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

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

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

if 语句中以特定顺序放置使用二元运算符相互比较的文字是否有任何好处?

不,唯一不同的情况是使用 equals.

比较对象

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

通过使用倒置的方式可以避免空检查。由于 1.7 你可以只使用 Objects.equals(obj, "foobar"); 来代替。

Is there any profit from putting literals that are compared to each other with binary operator in certain order within an if statement?

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

if (false == flag)

在那一个案例中,它可以帮助您避免这个错字:

if (flag = false)

...编译器不会保护你(这会将 false 分配给 flag 并且永远不会评估为真)。

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

if (!flag)

if (flag)

取决于您要查找的值。