5

javap定数プールに関するコマンドから生成された出力についてはほとんど質問がありません。プールを出力するときjavap、文字列定数を文字列として定義します。これは、 ASCIIで終了Ascizすることを意味すると理解しています。null

const #20 = Asciz       hello world;

これは、文字列の長さが不明であることを意味し、解析するには、に遭遇するまで各バイトを読み取りますnull

ただし、定数プール文字列定数の長さは、文字列の前の2バイトによって定義され、null追加されません。(定数プール仕様)。

文字列を間違ってjavap定義していますか、それとも私が知らない別の意味がありますか?AscizAsciz

4

2 に答える 2

4

バグ #6868539を参照してください。これは OpenJDK7 で修正され、代わりにjavap出力されるようになりUtf8ました。

于 2011-11-20T10:59:35.047 に答える
0

const #20 は実際の文字列ではなく、文字列に使用される UTF8 定義の文字です。定数 #20 を参照する文字列である別の定数がある可能性があります。asciz 定数は、フィールド名などの文字列以外にも使用されます。実際の情報には、UTF8 タグ、長さ、およびバイトが含まれます。

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.htmlを参照してください。

于 2011-11-20T10:49:53.977 に答える