通过检查字节码,我注意到javac在转换为数组类型时似乎重复了checkcast
指令。
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[]) a;
}
}
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显示预期的单转换
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
应该在对象不能被视为所请求的类型时引发异常,否则什么也不做,所以我不明白为什么加倍强制转换可能会有帮助。我还没有查看JDK源代码来了解它是如何产生的,以及这是否有助于解释原因(可能是一个提示)。
1条答案
按热度按时间rqmkfv5c1#
它是javac的一个known bug,但基本上是无害的。