令人困惑的缩进,为什么以及如何发生

Confusing indentation, why and how it can happen

这实际上不是要解决的问题,但我很好奇为什么下面的代码会给出 confusing indentation 可能丢失周围块的警告:

if(x!=y)
System.out.println("not equal"); 
index++;

如果我将 System.out.println("not equal"); 放在 {} 中,警告就会消失,但我很好奇当前看起来的代码在什么情况下会出错。

问题是,当您阅读这段代码时,您会错过一个视觉提示,即当条件 (x!=y) 为真时,System.out.println("not equal"); 仅是 运行。当您缩进代码时,错误也会消失:

if (x != y)
   System.out.println("not equal");

有些人可能仍然建议不要使用单行结果并鼓励您无论如何都使用块。人们可能会想在 System.out 下添加另一行代码,认为它也会在 x != y 时执行 - 而没有注意到缺少大括号。

为了清楚起见,if 语句中的任何内容通常都会缩进。例如:

if(foo) {
    if (bar) {
       System.out.println("foo bar");
    }
}

由于您只写了 1 行语句,因此不需要 {} 但仍建议缩进。没有它,将不会立即执行什么将不会立即显而易见。

例如,如果阅读您的代码的人不知道在没有括号的 if 语句中只有 1 行 get 被执行,他们可能会认为 index++; 行只有在 (x!=y)

此外,如果您不对所有 if 语句都使用 {},作为开发人员,您更容易犯错误。如果你养成了不使用它们的习惯,而忘记将它们用于多行 if 语句,你会得到意想不到的结果。例如,如果您决定在 if 块中的 System.out.println("not equal"); 之后放置一些内容,那么很容易忘记 {}.