gpt4 book ai didi

java - 令人困惑的 while block

转载 作者:行者123 更新时间:2023-12-01 06:53:34 25 4
gpt4 key购买 nike

以下代码块给我一个编译时错误。

        while(false)
{
System.out.println("HI");
}

该错误表明存在无法访问的语句。但以下代码可以编译

   boolean b=false;
while(b)
{
System.out.println("Hi");
}

我能想到的就是这个 -> In case-1 as false 是一个文字,所以编译器发现它无法访问,而 in case2 变量 b 在 while 条件 block 中在运行时被检查,所以没有编译错误?

最佳答案

编译器编写者无法决定将哪些条件标记为错误 - 规则位于 Java 语言规范中,对于此问题,请参见 14.21 Unreachable Statements .

相关句子是:“当且仅当 while 语句可达且条件表达式不是值为 false 的常量表达式时,所包含的语句可达。”

在每种情况下,您都有一个可达的 while 语句。在第一个版本中,false 是一个常量表达式,其值为 false,因此所包含的语句不被认为是可达的。在第二个版本中,b 根本不是常量表达式,因此所包含的语句被视为可访问。

final 添加到 b 的声明中会将 while 条件更改为值为 false 的常量表达式,从而使所包含的语句再次无法访问。

在 JLS 中指定什么是编译时错误、什么不是编译时错误的规则的好处是所有 Java 编译器都应该接受相同的程序集。规则一般不要求编译器做数据流分析,大概是为了限制编写编译器的成本和难度。

关于java - 令人困惑的 while block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com