首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JAVA“不短如果”--这是什么意思?

JAVA“不短如果”--这是什么意思?
EN

Stack Overflow用户
提问于 2016-03-16 23:33:14
回答 2查看 1.2K关注 0票数 2

基本上就是标题。通过Java BNF,我可以看到“无短if”,如:

代码语言:javascript
运行
复制
<statement no short if> ::= <statement without trailing substatement> | <labeled statement no short if> | <if then else statement no short if> | <while statement no short if> | <for statement no short if>

“不短”是什么意思?我看到"NoShortIf“出现在我的演讲幻灯片中,没有解释它的意思。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-17 00:38:41

答案出现在上面@ answer的评论中提供的链接中:

因此,语句在语法上分为两类:可能以没有其他子句的if语句结尾的语句(“简短的if语句”)和绝对没有的语句。 只有那些肯定不会以简短的if语句结尾的语句,才可能在包含Only子句的if语句中,在关键字Only之前显示为立即子语句。 这个简单的规则可以防止“悬空的其他”问题。带有"no short if“限制的语句的执行行为与相同类型语句的执行行为相同,而没有"no short if”限制;区分纯粹是为了解决语法上的困难。

票数 3
EN

Stack Overflow用户

发布于 2019-02-09 20:41:48

“短if”是一个if语句,而不包含其他语句。

在某些情况下,不允许使用“短if”来消除歧义。

以下是有效的Java。没有“简短的假设”,也没有含糊不清的地方。

代码语言:javascript
运行
复制
boolean flag = false;
if (x > 0) 
    if (x > 10)
        flag = true;
    else
        flag = false;
else 
    flag = true;

下面的代码也是有效的java代码,但是没有“简短的if”规则,如果其他代码属于哪种规则,就会产生歧义。

代码语言:javascript
运行
复制
if (x > 0)  if (x < 10) flag = true; else  flag = false;

以下Java语言规则

代码语言:javascript
运行
复制
IfThenStatement:
   if ( Expression ) Statement
IfThenElseStatement:
   if ( Expression ) StatementNoShortIf else Statement

意味着上述代码的含义是

代码语言:javascript
运行
复制
if (x > 0)  
    if (x < 10) 
       flag = true; 
    else  
       flag = false;

也就是说,inner属于内部if语句。

让我们用Java进行测试,以确保

代码语言:javascript
运行
复制
static Boolean shorty (int x) {
    Boolean flag = null;
    if (x > 0)  if (x < 10) flag = true; else  flag = false;
    return flag;
}


public static void main(String[] args) {
    System.out.println(shorty(-1));
    System.out.println(shorty(5));
    System.out.println(shorty(20));
}

输出是

代码语言:javascript
运行
复制
null
true
false
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36048981

复制
相关文章

相似问题

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