2011-11-20 24 views
5

Câu hỏi nhỏ về đầu ra được tạo ra từ lệnh javap liên quan đến hồ bơi không đổi. Khi javap in hồ bơi nó định nghĩa các hằng chuỗi như Asciz chuỗi, mà tôi hiểu nghĩa null Ascii chấm dứt:Javap Asciz Strings

const #20 = Asciz  hello world; 

Điều này có nghĩa rằng độ dài của chuỗi là không biết đến, và để phân tích bạn sẽ đọc từng byte cho đến khi bạn gặp phải null.

Tuy nhiên, độ dài của hằng số chuỗi hằng số được xác định bởi hai byte trước chuỗi và không có null được nối thêm. (Constant pool specification).

javap xác định các chuỗi là Asciz không chính xác hoặc không Asciz có ý nghĩa khác mà tôi không biết?

Trả lời

4

Xem bug #6868539. Nó được sửa trong OpenJDK7, hiện tại, thay vào đó, javap in Utf8.

+0

Tìm kiếm hoàn hảo, tuyệt vời. – Jivings

0

const # 20 không phải là chuỗi thực, mà đúng hơn là các ký tự được xác định UTF8 được sử dụng cho chuỗi của bạn. Bạn có thể có một hằng số khác là một chuỗi tham chiếu đến hằng số # 20. Các hằng số asciz được sử dụng cho những thứ khác ngoài các chuỗi như tên trường vv Thông tin thực tế chứa thẻ UTF8, độ dài và byte.

Xem http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html

+2

Đây là những gì tôi đã mô tả trong định nghĩa ngắn của tôi. Bạn thực sự liên kết với cùng một tham chiếu như tôi đã làm. Thực tế là nó xác định một chuỗi UTF8, và không phải là một chuỗi ASCIZ là những gì tôi đã đề cập đến. – Jivings

+0

Vì không có tham chiếu nào về các chuỗi ascii bị chấm dứt trong đặc tả định dạng tệp lớp, tôi nghĩ bạn có nghĩa là cách các chuỗi được định nghĩa trong nhóm. (Ngay cả trong các đặc điểm kỹ thuật 1.0 không có chuỗi ascii, nhưng thay vì Unicode. Không ai trong số họ là null chấm dứt). Jivings dường như hiểu câu hỏi của bạn tốt hơn tôi. –

+0

Đơn giản, những gì tôi muốn biết là tại sao họ được đặt tên Asciz trong hồ bơi liên tục khi họ rõ ràng là không bị chấm dứt. – Jivings

Các vấn đề liên quan