代码之家  ›  专栏  ›  技术社区  ›  Roshana Pitigala Laxmansinghsodhanohdiyala

Java编译器是否理解if语句中给出的条件?[副本]

  •  0
  • Roshana Pitigala Laxmansinghsodhanohdiyala  · 技术社区  · 6 年前

    这个问题已经有了答案:

    以下代码没有给出编译错误 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 声明?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Roshana Pitigala Laxmansinghsodhanohdiyala    6 年前

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

    例如,a Java编译器将接受代码 以下内容:

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

    即使价值 n 在编译时和原则上是已知的 可以在编译时知道 k 无法执行 .

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

    • 语句是否可访问

    • 语句能否正常完成

    这里的定义允许语句只有在可访问时才能正常完成。

    为了缩短对规则的描述,惯用缩写“iff”的意思是“if且only if”。


    资料来源: