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

罗莎娜·皮蒂加拉

以下代码不会给出 compile-error Unreachable statement

if(true)return;
int x;

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

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

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

因为如果不是,这应该导致另一个 compile-error variable x might not have been initialized事实上,它可以完美地编译和运行。所以,

java 编译器是否理解if语句中给出的条件

罗莎娜·皮蒂加拉

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

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

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

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

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

  • 语句是否可达

  • 一个语句是否可以正常完成

此处的定义允许语句只有在可达时才能正常完成。

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


来源 :

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Java编译器(尤其是其解析器)无法理解该语句

编译器是否优化“ for”语句中的第二个条件?

为什么 Kotlin 编译器在有效的 IF 语句中给出错误?

Java编译器命令概念使我难以理解

Java编译器错误:缺少返回语句

是否存在类似Java的Babel编译器?

Java编译器是否优化流过滤?

Java编译器是否优化了空的同步块?

Java自动拆箱-是否有编译器警告?

编译器是否可以自动优化我的“ OR”语句?

C++ 编译器是否优化了已知语句?

是否允许C编译器优化掉多余的语句?

Java编译器问题

远程Java编译器

插入Java编译器

为什么Java编译器不会为无法到达的then语句产生无法到达的语句错误?

是否可以在条件语句中链接hasClass()或is()?

为什么Java编译器不理解此变量总是初始化的?

Scala 编译器在编译 Scala 程序中导入的 Java 库时是否调用 javac?

Java为什么会有“无法到达的语句”编译器错误?

Java 编译器说“缺少 return 语句”,即使它无法访问

Java编译器/解释器

Python是否在多条件if语句中检查ALL条件?

Java如何在单个IF语句中处理多个条件

Java增量逻辑问题(条件语句中的增量)

分配指针并超出块的范围时,java编译器是否插入空闲?

Java编译器是否针对不同的语言环境进行了翻译?

在Java中初始化int数组时,编译器是否添加新的int []?

Java编译器是否包括字符串常量折叠?