1、JAVA中采用 Unicode编码 [ unicode编码一般是 采用UCS-2规范 双字节编码] , java中每个字符占两个字节 (不管是中文字符,还是英文字符 1char = 2 byte )。 ----此处指的是编译过后的 .class文件中存储+jvm加载运行的规则。
在 .java文件中指定的 各种编码格式,无论指定成哪种格式,最后 在编译成.class时 统统经过了unicode 编码 转换成双字节 在 JVM中 运行时 ,虚拟机操作字符就容易的多了!存储占用字节数 如上所述。
--------------------------------分隔符-----------------------------------------------------------
而 .java 源文件 :
每个字节 占 8bit ascii码 表中 0-256 中具体表示的内容 可以 自行补脑。
一个 英文 数字 各种标点 字符 在ASCII 表码中都有对应的值 用一个字节即可表示,高位全部补0 (补0充数)。
--------------------------------分隔符-----------------------------------------------------------
.java文件中 中文字符指定编码格式 UTF-8, 这个编码格式是一个可变长度的 范围1-4个字节。 如果指定中文字符编码为UTF-8则 占3~4个字节 。不要让这个干扰你理解 unicode 编码 ,其实无关[一个在内存中, 一个在磁盘中 orz .....]。
一般 不设置字符编码格式 [默认系统编码格式] 或者 编码格式 为 gbk 一般一个中文占2个字节。
最后 举个栗子:
------------------具体查看 编译文件 .class 文件 中 unicode编码 格式存储的值 ------------
char i ='中'; // char 类型一个 中文 字符 或者 英文字符 , char类型都占 2个字节。
StringBuffer unicode =new StringBuffer("\\u");
unicode.append(Integer.toHexString(i));
System.out.println(unicode.toString()); // "中" ---在java内部 对应的 unicode值为 \u4e2d
\u4e2d 值 可以通过 网上 搜 站长工具 有 unicode 与中文转换 查询 对应中文值 验证 。
\u表示是Unicode字符。 后面是具体的值。
unicode 是双字节 即 一个字符占2个字节 。这是 Unicode的编码规范 不是java决定的...不要纠结了。
-------- 源文件 .java的编码格式 举例如下----------
System.out.println(System.getProperty("file.encoding")); //文件编码格式
System.out.println("中".getBytes("gbk").length); // 长度为2个字节
System.out.println("中".getBytes("utf-8").length);//长度为3个字节
System.out.println("B".getBytes().length);//长度为1个字节
System.out.println("?".getBytes("utf-8").length);//长度为1个字节