java编译器是否理解if语句中给出的条件? [重复]

问题描述 投票:0回答:1

以下代码不会给出编译错误

Unreachable statement

if(true)return;
int x;

多年来我一直认为这是因为编译器不太关注给定的条件。

今天我发现编译器理解条件了,

int x;
if (true) {
    x = 0;
}
int y = x;

因为如果不是这样,这会导致另一个编译错误

variable x might not have been initialized
。事实上,它可以完美地编译和运行。所以,

java 编译器是否理解

if
语句中给出的条件?

java if-statement compiler-errors conditional-statements
1个回答
2
投票

Unreachable statements 致力于对“可达”一词的精确解释。这个想法是,从包含语句的构造函数、方法、实例初始值设定项或静态初始值设定项的开头到语句本身,必须存在一些可能的执行路径。分析考虑了陈述的结构。除了对条件表达式为常量 true 的 while、do 和 for 语句进行特殊处理外,在流程分析中不考虑表达式的值。

例如,Java 编译器将接受代码

int n = 5;
while (n > 7) k = 2;

即使

n
的值在编译时已知并且原则上在编译时可以知道对
k
的赋值永远不会被执行

本节中的规则定义了两个技术术语:

  • 声明是否可达

  • 语句能否正常完成

此处的定义仅允许语句在可达的情况下正常完成。

为了缩短规则的描述,习惯缩写“iff”用于表示“当且仅当”。


来源:

© www.soinside.com 2019 - 2024. All rights reserved.