为什么大括号不是强制性的(如下所示)?

Why are braces not mandatory (as shown below)?

现在每个人都在说,如果你想在一个控制语句中使用多个语句,则必须将它们包含在大括号中。但是,如果您这样使用:

if(condition) //first if statement
if(condition) //if statement nested inside the first
System.out.println("test"); //statement inside the second if statement

代码应该会导致错误,因为第二个 if 语句(没有分号)在第一个没有大括号的里面,它完成了第一个 if 语句的限制。因此 println 语句的范围应该在第一个 if 语句之外。因此上面的代码应该等价于

if(condition) {
    if(condition) 
}
System.out.println("test"); 

但事实并非如此。第一个代码运行成功。为什么?

因为条件语句包含它限定的语句。

大括号不是 if 语句语法的一部分。它的语法很简单:

 "if" "(" <expression> ")" <statement>

或者

"if" "(" <expression> ")" <statement> "else" <statement>

一种语句是块语句,其语法为:

"{" <statement>... "}"

其中 <statement>... 表示“零个或多个 <statement>”。

块语句可以包含 if-statement(或任何其他类型的语句)。但它不能将语句切成两半。而 if (condition) 只是语句的一半。

你的问题是这样开始的:

Now everyone speaks that if you wanna use multiple statements inside a control statement, it is mandatory to include them inside braces.

这是千真万确的。您在这里遇到的细微差别是某事是单个语句而不是多个语句的含义。

正如@rici 指出的那样,在大多数编程语言中,if 语句由某种条件表达式和条件为真时执行的受保护语句组成。从这个意义上讲,if 语句必须在其中包含一些语句才能在语法上正确。

所以让我们看看你的陈述,但要做到 bottom-up。声明

System.out.println("Test");

被视为单个语句。同样,

if (condition)
System.out.println("Test");

也是一个单一的条件语句。然而,

if (condition)

本身不是有效的条件语句;这将是一个语法错误。

这意味着

if (condition1)
if (condition2)
System.out.println("Test");

是一个单一的条件。具体来说,它是一个条件为condition1的条件。声明是守卫也是有条件的。该条件有条件 condition2 并保护打印语句。