gpt4 book ai didi

Java 8/Fernflower 反编译器 : Bug or Feature

转载 作者:行者123 更新时间:2023-11-29 04:11:06 26 4
gpt4 key购买 nike

OpenJDK 1.8.0_191

我使用 Fernflower 对下面的一段代码进行了编译和反编译。

public class Decompile {
public static void main(String[] args) {
final int VAL = 20;
System.out.println(VAL);
}
}

输出是:

public class Decompile {

public static void main(String[] args) {
boolean VAL = true;
System.out.println(20);
}
}

我很困惑,VAL 是怎么变成 boolean 值的?

更新:

在 Intellij IDEA 中反编译后的代码如下所示:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

public class Decompile {
public Decompile() {
}

public static void main(String[] args) {
int VAL = true;
System.out.println(20);
}
}

最佳答案

字节码是

L0
LINENUMBER 5 L0
BIPUSH 20
ISTORE 1
L1
LINENUMBER 6 L1
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
BIPUSH 20
INVOKEVIRTUAL java/io/PrintStream.println (I)V

如您所见,BIPUSH20 压入堆栈,然后 ISTORE 获取值并将其存储到局部变量中。

这是一个Fernflower 问题。


为了您的兴趣,字节码版本 55 的输出是

int VAL = true;
System.out.println(20);

你可以看到反编译器可能是错误的:)

关于Java 8/Fernflower 反编译器 : Bug or Feature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069491/

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