现在每个人都说,如果您想在一个控制语句中使用多个语句,则必须将它们包含在大括号中。但是,如果您这样使用:
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");
但不是那样的。第一段代码成功运行。为什么?
发布于 2020-09-04 14:35:35
你以以下声明开始你的问题:
现在每个人都说,如果您想在一个控制语句中使用多个语句,则必须将它们包含在大括号中。
那绝对是真的。您在这里遇到的微妙之处在于,与多个语句相比,单个语句意味着什么。
正如@rici所指出的,在大多数编程语言中,if语句由某种条件表达式和一个有保护的语句组成,如果该条件为真,则执行该语句。从这个意义上说,if语句必须在其中包含一些语句才能在语法上正确。
所以让我们看看你的陈述,但要自下而上。声明
System.out.println("Test");
被视为一条语句。类似地,
if (condition)
System.out.println("Test");
也是一个条件语句。然而,
if (condition)
它本身不是一个有效的条件语句;这将是一个语法错误。
这意味着
if (condition1)
if (condition2)
System.out.println("Test");
是一个条件。具体来说,它是一个条件条件,其条件是condition1
。语句是警卫也是有条件的。该条件具有条件condition2
并保护print语句。
发布于 2020-09-04 12:03:09
因为条件语句包含它限定的语句。
大括号不是if
语句语法的一部分。它的语法很简单:
"if" "(" <expression> ")" <statement>
或
"if" "(" <expression> ")" <statement> "else" <statement>
一种类型的语句是块语句,其语法是:
"{" <statement>... "}"
其中<statement>...
的意思是“零或多个<statement>
s”。
块语句可以包括if-语句(或任何其他类型的语句)。但它不能把一份陈述撕成两半。而if (condition)
仅仅是声明的一半。
https://stackoverflow.com/questions/63746850
复制