java 编译器是否理解 if 语句中给出的条件?
Does the java compiler understand conditions given in if statements?
下面的代码没有给出编译错误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
语句中给出的条件?
Unreachable Statements专门对这个词进行了精确的解释"reachable."的思想是从构造器、方法开始肯定有一些可能的执行路径、实例初始值设定项或包含语句本身的静态初始值设定项。分析考虑了语句的结构。除了while、do、for条件表达式的常量值为true的语句特殊处理外,流分析不考虑表达式的取值。
例如,Java 编译器将接受代码:
int n = 5;
while (n > 7) k = 2;
即使 n
的值在编译时已知并且原则上 在编译时可以知道对 k
的赋值永远不会执行.
本节中的规则定义了两个技术术语:
语句是否可达
语句是否能正常完成
这里的定义允许语句只有在可达时才能正常完成。
为缩短规则描述,习惯缩写"iff"表示"if and only if."
来源:
下面的代码没有给出编译错误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
语句中给出的条件?
Unreachable Statements专门对这个词进行了精确的解释"reachable."的思想是从构造器、方法开始肯定有一些可能的执行路径、实例初始值设定项或包含语句本身的静态初始值设定项。分析考虑了语句的结构。除了while、do、for条件表达式的常量值为true的语句特殊处理外,流分析不考虑表达式的取值。
例如,Java 编译器将接受代码:
int n = 5;
while (n > 7) k = 2;
即使 n
的值在编译时已知并且原则上 在编译时可以知道对 k
的赋值永远不会执行.
本节中的规则定义了两个技术术语:
语句是否可达
语句是否能正常完成
这里的定义允许语句只有在可达时才能正常完成。
为缩短规则描述,习惯缩写"iff"表示"if and only if."
来源: