请参阅JLS7.第3.2节第16页说明
Java编程语言使用UTF-16编码表示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#8 = Utf8 ()V #9 = Utf8 Code #10 = Methodref #3.#11 // java/lang/Object." ":()V #11 = NameAndType #7:#8 // " ":()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 { ...
我只看到Utf8编码,没有Utf16.为什么没有Utf16编码.
谢谢
在执行程序中,文本(通常为1)以UTF-16表示.
但是在".class"文件中,常量池中的文本(即字符串文字,标识符等)以UTF-8编码以节省空间.(UTF-8中的常量池条目的编码是由JVM规范强制执行的- 第4.4节 ......并且与默认字符集无关.)
加载类文件时,类加载器将UTF-8常量池条目转码为UTF-16.
1 - 可以编写一个应用程序来以各种不同的方式编码文本.我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案; 即存储文本a String
或任何其他子类型时获得的编码CharacterSequence
.