Java编程语言中的编码

Java编程语言中的编码,java,encoding,Java,Encoding,请看。第16页第3.2节说明 Java编程语言以16位代码单元的序列表示文本, 使用UTF-16编码 我反汇编了一个hello world程序 class Y { String hello = "hello"; } 大会如下: Classfile /c:/Work/SR1/e2/tmp/Y.class Last modified Jan 5, 2014; size 240 bytes MD5 checksum 96694fda4f346a62d5412c56dc36c45d Compiled

请看。第16页第3.2节说明

Java编程语言以16位代码单元的序列表示文本, 使用UTF-16编码

我反汇编了一个hello world程序

class Y {
String hello = "hello";
}
大会如下:

Classfile /c:/Work/SR1/e2/tmp/Y.class
Last modified Jan 5, 2014; size 240 bytes
MD5 checksum 96694fda4f346a62d5412c56dc36c45d
Compiled from "X.java"
class Y
  SourceFile: "X.java"
  minor version: 0
  major version: 52
  flags: ACC_SUPER
  Constant pool:
  #1 = Class              #2             //  Y
  #2 = Utf8               Y
  #3 = Class              #4             //  java/lang/Object
  #4 = Utf8               java/lang/Object
  #5 = Utf8               hello
  #6 = Utf8               Ljava/lang/String;
  #7 = Utf8               <init>
  #8 = Utf8               ()V
  #9 = Utf8               Code
  #10 = Methodref          #3.#11         //  java/lang/Object."<init>":()V
  #11 = NameAndType        #7:#8          //  "<init>":()V
  #12 = String             #5             //  hello
  #13 = Fieldref           #1.#14         //  Y.hello:Ljava/lang/String;
  #14 = NameAndType        #5:#6          //  hello:Ljava/lang/String;
  #15 = Utf8               LineNumberTable
  #16 = Utf8               SourceFile
  #17 = Utf8               X.java
  {
  ...
Classfile/c:/Work/SR1/e2/tmp/Y.class
最后修改日期:2014年1月5日;大小240字节
MD5校验和96694fda4f346a62d5412c56dc36c45d
从“X.java”编译而来
Y类
源文件:“X.java”
次要版本:0
主要版本:52
旗帜:ACC_SUPER
固定池:
#1=等级#2//Y
#2=Utf8 Y
#3=类#4//java/lang/Object
#4=Utf8 java/lang/Object
#5=Utf8你好
#6=Utf8 Ljava/lang/String;
#7=Utf8
#8=Utf8()V
#9=Utf8代码
#10=Methodref#3.#11//java/lang/Object.“:()V
#11=名称和类型#7:#8/“”:()V
#12=字符串#5//您好
#13=Fieldref#1.#14//Y.hello:Ljava/lang/String;
#14=名称和类型#5:#6//hello:Ljava/lang/String;
#15=Utf8行号表
#16=Utf8源文件
#17=Utf8 X.java
{
...
我只看到Utf8编码,没有Utf16。为什么没有Utf16编码


谢谢

在正在执行的程序中,文本(通常是1)用UTF-16表示

但在“.class”文件中,常量池中的文本(即字符串文本、标识符等)用UTF-8编码以节省空间。(UTF-8中常量池条目的编码由…强制执行,与默认字符集无关。)

加载类文件时,类加载器将UTF-8常量池条目转换为UTF-16



1-可以编写应用程序以多种不同的方式对文本进行编码。我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案;也就是说,当您在执行程序中将文本存储为
字符串
字符序列
的任何其他子类型时,文本是(通常为1)以UTF-16表示

但在“.class”文件中,常量池中的文本(即字符串文本、标识符等)用UTF-8编码以节省空间。(UTF-8中常量池条目的编码由…强制执行,与默认字符集无关。)

加载类文件时,类加载器将UTF-8常量池条目转换为UTF-16



1-可以编写应用程序以多种不同的方式对文本进行编码。我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案;即,当您将文本存储为
字符串
字符序列
的任何其他子类型时所得到的编码,因为……您的字符集是UTF8tring内部保存着16位代码点。在字符串常量中输入一些汉字,然后查看它的反编译结果如何电 在文本文件中?因为…您的字符集是UTF8。字符串内部包含16位代码点。在字符串常量中键入一些中文字符,然后查看它分解为什么内容。如何放置电 在文本文件中?在类文件的常量池中,字符串也没有其他编码:@Charlie-correct.(我假设您指的是Brian Roach的误导性评论…)是的。我还认为,既然问题引用了JLS规范,那么最好提供一个指向JVM规范相关部分的链接。谢谢,我已经合并了这一部分。在类文件的常量池中,字符串也没有其他编码:@Charlie-correct。(我想你指的是Brian Roach的误导性评论…)是的。我还认为,既然问题引用了JLS规范,那么最好提供一个到JVM规范相关部分的链接。谢谢,我已经合并了这个。