【问题标题】:Code unreachable in while and if statements [duplicate]在while和if语句中无法访问代码[重复]
【发布时间】:2019-11-11 08:08:08
【问题描述】:

以下代码无法编译,因为x=3 无法访问

while (false) { x=3; }

但是为什么for( int i = 0; i< 0; i++) {x = 3;} 编译得很好?在此代码中,x=3 也无法访问。

【问题讨论】:

  • 当然不可达,试试while(true)

标签: java


【解决方案1】:

JLS 14.21, Unreachable Statements

当 while 语句可达且条件表达式不是值为 false 的常量表达式时,包含的语句 [在 while 循环中] 是可达的。

false是一个常量表达式,其值为false,所以x=3;是不可达的。

如果 for 语句可到达且条件表达式不是值为 false 的常量表达式,则包含的语句 [在基本 for 循环中] 是可到达的。

i<0 不是常量表达式,因此包含的语句被认为是可达的,即使它实际上不可达。

【讨论】:

  • 解释得很好:)
【解决方案2】:

while 语句可以在编译时被证明不可达,而 for 语句需要在运行时检查才能发现它不可达。

如果你试试这个

int i = 0;
while(i>1) { i = 4; }

代码会编译得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2014-02-01
    • 1970-01-01
    • 2022-01-28
    • 2017-04-29
    • 2012-11-02
    • 2012-12-09
    相关资源
    最近更新 更多