gpt4 book ai didi

java - Java中的无限循环

转载 作者:IT老高 更新时间:2023-10-28 11:40:59 25 4
gpt4 key购买 nike

看看下面的 Java 中的无限 while 循环。它会导致它下面的语句出现编译时错误。

while(true) {
System.out.println("inside while");
}

System.out.println("while terminated"); //Unreachable statement - compiler-error.

以下相同的无限 while 循环,但是可以正常工作并且不会发出任何错误,其中我只是将条件替换为 boolean 变量。

boolean b=true;

while(b) {
System.out.println("inside while");
}

System.out.println("while terminated"); //No error here.

在第二种情况下,循环之后的语句显然无法访问,因为 boolean 变量 b 为真,但编译器根本不会提示。为什么?


编辑: 以下版本的 while 显然会陷入无限循环,但即使 if 循环内的条件始终为 false,因此循环永远不会返回,并且可以由编译器在编译时自行确定。

while(true) {

if(false) {
break;
}

System.out.println("inside while");
}

System.out.println("while terminated"); //No error here.

while(true) {

if(false) { //if true then also
return; //Replacing return with break fixes the following error.
}

System.out.println("inside while");
}

System.out.println("while terminated"); //Compiler-error - unreachable statement.

while(true) {

if(true) {
System.out.println("inside if");
return;
}

System.out.println("inside while"); //No error here.
}

System.out.println("while terminated"); //Compiler-error - unreachable statement.

编辑:ifwhile 相同。

if(false) {
System.out.println("inside if"); //No error here.
}

while(false) {
System.out.println("inside while");
// Compiler's complain - unreachable statement.
}

while(true) {

if(true) {
System.out.println("inside if");
break;
}

System.out.println("inside while"); //No error here.
}

以下版本的 while 也会陷入无限循环。

while(true) {

try {
System.out.println("inside while");
return; //Replacing return with break makes no difference here.
} finally {
continue;
}
}

这是因为 finally block 总是被执行,即使 return 语句在 try block 本身之前遇到它。

最佳答案

编译器可以轻松且明确地证明第一个表达式always 会导致无限循环,但对于第二个表达式就没有那么容易了。在您的玩具示例中,这很简单,但是如果:

  • 变量的内容是从文件中读取的?
  • 变量不是本地变量,可以被另一个线程修改?
  • 变量依赖于一些用户输入?

编译器显然没有检查您更简单的情况,因为它完全放弃了这条路。为什么?因为规范禁止它更难。见 section 14.21 :

(顺便说一句,我的编译器确实在声明变量时会报错final。)

关于java - Java中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8570243/

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