答:这个主题的最佳答案基本上回答了我的问题:在非void方法中缺少return语句编译.
我想知道为什么我不需要在这个private方法中返回一个值?
public class Test {
private String testLoop() {
while(true) { }
}
public static void main(String[] args) {
Test test = new Test();
test.testLoop();
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得这不应该编译.但是,它编译得很好.这被定义为合法的?
在这种情况下,我发现将方法更改为:
private String testLoop() {
while(true) {
if(false == true) {
break;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
要求我提供一个返回类型,即使javap告诉我编译器为两个实现生成完全相同的字节代码testLoop.
那么Java编译器如何以及何时确定方法是否实际需要返回值?
不幸的是,删除的答案提到了暂停问题.我想Java编译器并没有像上面给出的例子那样努力跟踪方法,因为它无法在常规设置中找到所有可能的循环.
private String testLoop() {
while(true) { } //infinite loop
}
Run Code Online (Sandbox Code Playgroud)
上面的方法永远不会返回,因为那里存在无限循环。所以它不期待回报或者永远不会达到回报。