gpt4 book ai didi

Java 编译器/eclipse 无法识别死代码

转载 作者:行者123 更新时间:2023-12-01 17:09:58 24 4
gpt4 key购买 nike

所以我最近遇到了这个。我正在创建一个 if-else 语句,其条件是最终 boolean 变量。 Eclipse 立即告诉我代码的 else 部分无法访问,因此是死代码。这是我的代码(压缩)。

public static void main(String[] args){
final boolean state = true;
if(state == true){
System.out.println("A");
}else{
System.out.println("B");
}
}

然后我想如果代码保持不变但变量不再是最终的会发生什么?所以我尝试了一下,结果就是这样,没有任何警告或错误。代码:

public static void main(String[] args){
boolean state = true;
if(state == true){
System.out.println("A");
}else{
System.out.println("B");
}
}

现在我想知道,为什么第一个案例被检测到并被标记,而第二个案例却没有?

提前谢谢您。

最佳答案

尝试将此作为替代方案。

public class Test061 {
public static void main(String[] args){
int a = 0;
if(1 == (a+1)){
System.out.println("A");
}else{
System.out.println("B");
}
}
}

仍然没有警告。为什么?

因为编译器不会执行你的代码。它只有在看到一些“常量”或“常量表达式”时才会发出警告。显然,当您放置 final 时,编译器就知道该值无法更改。而如果您使用“真实变量”或“变量表达式”,它不知道,因为它不会执行您的代码(查看 state(a+1 ) 位于这一行)。因此,在后一种情况下,您不会收到任何警告。希望现在这更有意义。

这样想:编译器会进行一些代码分析。此分析检测到第一个基本模式,而第二个模式则未检测到(可能是因为它不是那么基本)。

关于Java 编译器/eclipse 无法识别死代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24220097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com