|
1
21
无法访问的语句在Java中被禁止,并且必须触发编译错误。JLS定义了什么是无法访问的语句: https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.21 这里太长了,不能完全引用,但这里有一个摘录( 强调 我的):
因此,答案将取决于您使用的编译器及其优化选项。 |
![]() |
2
10
编译器在编译时对其进行优化:
给我(和我的
代码只是打印
所有最新的Java编译器都在编译时消除了死代码。 |
![]() |
3
3
这个问题没有特别的答案。这取决于Java编译器。 大多数编译器忽略死代码,因为它不会改变代码的语义,即使它会导致更大的类文件。 如果你对这样的分析感兴趣,有很多关于消除死代码的文献。 |
![]() |
4
3
您可以尝试编写代码并反编译类文件。我的编译器优化了
像
和
像
我认为所有编译器版本都会以这种方式优化它。 |
|
5
2
特别是关于Eclipse,它将警告您最后一个else块是不可访问的,但是编译被委托给您的jdk,所以可能是编译器警告Eclipse。 |
![]() |
6
2
现在我在eclipse中编写代码,我的方法是
在我编译了代码之后,我用JD-GUI反编译了代码。我的反编译代码是:
结果很好! |
![]() |
7
1
不,它不会,除非两个块都有相同的内容,为什么要检查它?这在语义上是不正确的。编译器删除最后一个不可访问的
|
![]() |
8
0
相关答案: Java If(false) Compile 请参阅有关使用javap-c诊断字节码以查看是否实际上消除了死代码的特别说明。 https://stackoverflow.com/a/6240017/679457 |
![]() |
George S. · 是否存在基于元组的控制流语句内部表示? 7 年前 |
![]() |
FlatAssembler · 在x86程序集中计算exp(x) 7 年前 |
![]() |
cib · 即时编译和动态编译有什么区别? 7 年前 |
![]() |
Artemis · 寄存器与指令之间的差异 7 年前 |
![]() |
Sam · 了解go工具编译和链接命令 7 年前 |