gpt4 book ai didi

jvm - 为什么 javac 校验数组两次?

转载 作者:行者123 更新时间:2023-12-04 11:45:17 24 4
gpt4 key购买 nike

检查字节码,我注意到 javac 似乎重复了 checkcast转换为数组类型时的说明。

Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}

javac编译版本的javap反汇编
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #2; //class "[Ljava/lang/Object;"
4: checkcast #2; //class "[Ljava/lang/Object;"
7: astore_2
8: return

测试 jikes 显示了预期的单一 Actor 阵容
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast如果对象不能被视为请求的类型,则应该引发异常,否则什么都不做,所以我不明白为什么它可能有助于将转换加倍。我还没有查看 JDK 源代码以了解它是如何生成的,如果这有助于解释原因(也许这只是一个提示)。

最佳答案

这是一个 known bug的javac。但它大多是无害的。

关于jvm - 为什么 javac 校验数组两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404240/

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