Javap Asciz Strings

时间:2011-11-20 09:58:24

标签: java class bytecode javap

关于常量池的javap命令生成的输出的小问题。 当javap打印池时,它将字符串常量定义为Asciz个字符串,我理解这意味着null终止了Ascii:

const #20 = Asciz       hello world;

这意味着字符串的长度是未知的,要解析,您将读取每个字节,直到遇到null

但是,常量池字符串常量的长度由字符串前面的两个字节定义,并且没有附加null。 (Constant pool specification)。

javap错误地将字符串定义为Asciz还是Asciz还有另一种我不知道的含义?

2 个答案:

答案 0 :(得分:4)

bug #6868539。它已在OpenJDK7中修复,现在javap会打印Utf8

答案 1 :(得分:0)

const#20不是实际的字符串,而是用于字符串的UTF8定义的字符。你可能有另一个常量,它是一个引用常量#20的字符串。 asciz常量用于除字符串之外的其他内容,例如字段名称等。实际信息包含UTF8标记,长度和字节。

请参阅http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html