Tôi đã dịch ngược một lớp học với javap
và tôi nhìn thấy một số bản sao trong phần Hồ bơi cố định, như thế này:Sao chép nhóm liên tục của lớp Java?
#19 = Class #350 // java/lang/StringBuilder
... Some other class constants here
#318 = Class #350 // java/lang/StringBuilder
Methodrefs tham khảo chỉ có một trong số họ:
#20 = Methodref #19.#351 // java/lang/StringBuilder."<init>":()V
#22 = Methodref #19.#353 // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
#24 = Methodref #19.#355 // java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
#25 = Methodref #19.#356 // java/lang/StringBuilder.toString:()Ljava/lang/String;
#110 = Methodref #19.#445 // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
là lớp này đúng theo The class File Format? Tôi nghĩ rằng mỗi lớp được đề cập chỉ một lần và được giới thiệu sau đó bởi chỉ mục của nó trong phần bytecode.
$ javac -version
javac 1.7.0_15
Một điều kỳ lạ khác là nguồn gốc của lớp đại diện cho hồ bơi không đổi trong javac Pool.java. Điều này nói rằng nó sẽ không đặt một đối tượng vào hồ bơi nếu nó đã có (với sự giúp đỡ của một HashMap). Tôi tự hỏi, nếu các phương thức equals()/hashCode() của các lớp này được lồng ghép đúng cách.
Bạn có nhìn vào đó lỗi bạn đã liên kết? Nó đã được báo cáo trong năm 2008, và hoạt động cuối cùng trên nó là 2 năm trước đây. Đã thực sự bị hỏng, nó đã được cố định từ lâu rồi. – cHao
Tôi đã không đề cập đến nó bao nhiêu tuổi. Tôi đã đề cập đến lỗi đó và sự thừa nhận của nó. Ý tôi là, đây thực sự là một lỗi. –
Đó là một sự thiếu hiệu quả .... nhưng nó không chính xác. – cHao