Java if-else结构中的不可访问代码
如果有以下代码,我在eclipse中的else If代码中正确地得到了警告:Java if-else结构中的不可访问代码,java,if-statement,compiler-construction,Java,If Statement,Compiler Construction,如果有以下代码,我在eclipse中的else If代码中正确地得到了警告: final int x = 8; if (x < 10) { System.out.println(x); } else if (x < 5) { System.out.println(x); } 与 getX()是在某处定义的 原因是什么?final int x=8; final int x = 8; if (x < 10) { System.out.pri
final int x = 8;
if (x < 10) {
System.out.println(x);
} else if (x < 5) {
System.out.println(x);
}
与
getX()
是在某处定义的
原因是什么?final int x=8;
final int x = 8;
if (x < 10) {
System.out.println(x);
} else if (x < 5) {
System.out.println();
}
if(x<10){
系统输出println(x);
}else if(x<5){
System.out.println();
}
这里您将值声明为8
因此,if将执行。不可能执行其他操作
但在第二种情况下,首先我们不知道值。在运行时,只有它知道。
JVM
知道x在编译时总是小于10,但如果替换x
声明
final int x = getX();
JVM
将只在运行时知道要比较的x
值
相关问题:
最终整数x=8
编译器肯定知道x<10
和if
分支始终被执行,而在第二种情况下,它无法知道被调用函数返回的值。在编译时,编译器知道x始终是8。但如果使用函数,它不会深入到该函数。最终原语是编译时常量,因此它可以在编译时执行无法访问的代码检查。在这种情况下,编译器知道x=8
,并可以相应地确定if语句的结果
对于getX()
方法,它不会在编译时执行该检查。这意味着您不会看到该警告。if(8<10){
if (8 < 10) {
//Executing code
} else {
if (8 < 5) {
//Alternative code
}
}
//执行代码
}否则{
如果(8<5){
//替代代码
}
}
我相信这与编译器读取代码的方式基本相同(有些人的知识可能比我多,我相信他们可以纠正我)
也就是说,如果您查看步骤的逻辑顺序,就会发现编译器已经确定了执行步骤,并且可以确定第二个if永远不会满足。如果您交替使用getX()
,尽管编译器无法做出这些假设。如果这一假设成立
xwhat是
getX()你的问题模棱两可。请为我们澄清一下。else但是基本上是死代码,无法访问?那么,如果您知道else无法访问,那么代码的意义是什么?@jacobm是的,有一个问题:如果getX()类似于int getX(){return 8;},这会是个问题吗?
final int x = getX();
if (8 < 10) {
//Executing code
} else {
if (8 < 5) {
//Alternative code
}
}