Kiểm tra bytecode, tôi đã nhận thấy javac có vẻ trùng lặp với các hướng dẫn checkcast
khi truyền tới các loại mảng.Tại sao mảng kiểm tra javac hai lần?
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
javap tháo của phiên bản javac biên soạn
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
Testing Jikes thể hiện single cast dự kiến
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
là nghĩa vụ để nâng cao một ngoại lệ nếu đối tượng không thể được điều trị như loại được yêu cầu và nếu không thì không có gì, vì vậy tôi không thấy lý do tại sao nó có thể giúp tăng gấp đôi dàn diễn viên. Tôi đã không xem xét các nguồn JDK để xem nó được tạo ra như thế nào, và nếu điều đó giúp giải thích lý do tại sao (có thể nó có nghĩa là gợi ý).
Thú vị ... Thảo luận ở nơi khác: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants