首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么大括号不是强制性的(如下面所示)?

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

Stack Overflow用户
提问于 2020-09-04 19:11:55
回答 2查看 53关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
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语句之外。因此,上述代码应等效于

代码语言:javascript
代码运行次数:0
运行
复制
if(condition) {
    if(condition) 
}
System.out.println("test"); 

但不是那样的。第一段代码成功运行。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-04 22:35:35

你以以下声明开始你的问题:

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

那绝对是真的。您在这里遇到的微妙之处在于,与多个语句相比,单个语句意味着什么。

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

所以让我们看看你的陈述,但要自下而上。声明

代码语言:javascript
代码运行次数:0
运行
复制
System.out.println("Test");

被视为一条语句。类似地,

代码语言:javascript
代码运行次数:0
运行
复制
if (condition)
System.out.println("Test");

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

代码语言:javascript
代码运行次数:0
运行
复制
if (condition)

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

这意味着

代码语言:javascript
代码运行次数:0
运行
复制
if (condition1)
if (condition2)
System.out.println("Test");

是一个条件。具体来说,它是一个条件条件,其条件是condition1。语句是警卫也是有条件的。该条件具有条件condition2并保护print语句。

票数 1
EN

Stack Overflow用户

发布于 2020-09-04 20:03:09

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

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

代码语言:javascript
代码运行次数:0
运行
复制
 "if" "(" <expression> ")" <statement>

代码语言:javascript
代码运行次数:0
运行
复制
"if" "(" <expression> ")" <statement> "else" <statement>

一种类型的语句是块语句,其语法是:

代码语言:javascript
代码运行次数:0
运行
复制
"{" <statement>... "}"

其中<statement>...的意思是“零或多个<statement>s”。

块语句可以包括if-语句(或任何其他类型的语句)。但它不能把一份陈述撕成两半。而if (condition)仅仅是声明的一半。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63746850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档