Java如何将字符串编码为字节码?

3

我很好奇Java汇编代码是如何转换为字节码的?比如说这个Java汇编代码:

print 'Hello World'

我知道这不是Java汇编实际的样子,只是为了帮助阐述我的观点。那么Java是如何将上述代码转换成字节码的呢?例如,汇编器是否会删除单引号,留下以下内容:

print Hello World

在转换为字节码时,将打印内容作为指令,其他内容作为参数,还是保留单引号?如果我的问题难以理解,请原谅,我可以编辑它。


5
你完全错了,这里根本没有引号。该字符串仅以字节码形式表示为一个简单的引用。该字符串的字符在单独的结构体常量池中。 - Marko Topolnik
1
首先,我不知道你所说的“汇编”是什么意思,因为在将Java编译成.class文件的过程中并没有涉及到这种东西。其次,字符串已经是数字了(它们还能是什么?),在.class文件中这些数字可能与你的.java文件中完全相同,也可能采用不同的编码方式,但这并没有太大的区别。 - Marko Topolnik
1
是的,您会看到它(刚刚检查过,显然它使用UTF-8),以及许多其他字符串,例如变量名称、引用类等。 - Marko Topolnik
1
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4 - SK-logic
1
我认为你会受益于阅读一本关于编译器技术的书籍(或参加一门课程)。很高兴你对这个工作原理感到好奇,但这确实不是可以在一个段落中解释清楚的事情。 - Michael Kay
显示剩余5条评论
1个回答

1

在存储文字常量时,并没有涉及任何字节码。.class文件只有这些常量的表格,当类被加载时,它们就会被放到内存中,就像初始化静态变量一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接