java - 为什么Java只在while循环的情况下才识别不可达代码?

标签 java loops if-statement unreachable-code

<分区>

如果我有这样的代码

public static void main(String args[]){
    int x = 0;
    while (false) { x=3; }  //will not compile  
}

编译器会提示 x=3 是无法访问的代码,但如果我有这样的代码

public static void main(String args[]){
    int x = 0;
    if (false) { x=3; }
    for( int i = 0; i< 0; i++) x = 3;   
}

虽然 if 语句for 循环 中的代码无法访问,但它会正确编译。为什么 java 工作流逻辑没有检测到这种冗余?任何用例?

最佳答案

Java Language Specification 中所述,这个特性是为“条件编译”保留的。

JLS 中描述的一个示例是您可能有一个常量

static final boolean DEBUG = false;

以及使用这个常量的代码

if (DEBUG) { x=3; }

这个想法是提供一种可能性,可以轻松地将 DEBUGtrue 更改为 false 而无需对代码进行任何其他更改,这将如果上面的代码出现编译错误,则不可能。

关于java - 为什么Java只在while循环的情况下才识别不可达代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23977508/

相关文章:

java - 在构造函数中分配字符串值

java - java中生成序列号

java - 以下从某些队列实现中检索整数值的代码是否正确

ruby - 如何在 ruby​​ 中编写负循环,如 for(i=index; i >= 0; i --)

python - 在 Python 中解包的多个 for 循环迭代器

c - if 语句中只有变量名意味着什么

php 如果某项等于 x、y 或 z

JavaScript:仅当单词包含整数 0-9 时,如何从字符串中删除最后一个单词?

Java - MD5 字符串检查和 REGEX 错误

javascript - 根据条件对 html 组件进行 jsx 循环包装