用Java编程语言编码

gud*_*dge 1 java encoding

请参阅JLS7.第3.2节第16页说明

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

我拆开了一个hello world程序.

class Y {
String hello = "hello";
}
Run Code Online (Sandbox Code Playgroud)

以下是集会:

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
  {
  ...
Run Code Online (Sandbox Code Playgroud)

我只看到Utf8编码,没有Utf16.为什么没有Utf16编码.

谢谢

Ste*_*n C 5

在执行程序中,文本(通常为1)以UTF-16表示.

但是在".class"文件中,常量池中的文本(即字符串文字,标识符等)以UTF-8编码以节省空间.(UTF-8中的常量池条目的编码是由JVM规范强制执行的- 第4.4节 ......并且与默认字符集无关.)

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


1 - 可以编写一个应用程序来以各种不同的方式编码文本.我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案; 即存储文本a String或任何其他子类型时获得的编码CharacterSequence.