【问题标题】:Does the java compiler understand conditions given in if statements? [duplicate]java 编译器是否理解 if 语句中给出的条件? [复制]
【发布时间】:2018-06-22 15:53:54
【问题描述】:

以下代码没有给出编译错误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 会评估常量表达式,它“理解”那些。当然,其他表达式必须在运行时计算。

标签: java if-statement compiler-errors compiler-construction conditional-statements


【解决方案1】:

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

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

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

即使n 的值在编译时已知并且原则上在编译时可以知道对k 的赋值永远无法执行

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

  • 语句是否可达

  • 语句能否正常完成

这里的定义允许一个语句只有在它可达时才能正常完成。

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


来源:

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2020-03-01
    相关资源
    最近更新 更多