java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解
2021-01-17 07:15
标签:project oracl 配置 执行文件 output 格式 依次 epo style 我自己出了一道面试题,如下: 这篇文章与我猜想的一致,已经很充分的说明了问题:https://www.cnblogs.com/louiswong/p/6062417.html .java .class 保存时 可以保存为 utf-8编码,但是运行时一定是 unicode编码。 ----------------------------------------------------------------------------------- 在讨论这个问题之前,我们需要先区分unicode和UTF。 接着,要分清内码(internal encoding)和外码(external encoding)。 要注意的是,源代码编译产生的目标代码文件(可执行文件或class文件)中的编码方式属于外码。 先看一下内码 外码 总结: EOF java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解 标签:project oracl 配置 执行文件 output 格式 依次 epo style 原文地址:https://www.cnblogs.com/del88/p/12918993.html public static void main(String[] args) {
char a = ‘9‘;
char b = 9;
char c = ‘我‘;
System.out.println(Integer.valueOf(c));//输出为 25105
}
请根据本页面右侧编码资料(ASCII码),回答以上Java代码【运行】后,a,b,c 依次在内存中 如何 存储的?
这道题就是考察之前说的字节与字符,这道题若知道原理的可以快速 利用 asc码和计算器,迅速得出答案。
A: java 是 unicode ,通常我们说 UTF-16 就是 unicode ,但是经过我的测试 UTF-16 又分:UTF-16BE 和 UTF-16LE 两种,java 采用的是 UTF-16BE; 既然是unicode 中文肯定可以存了。
C: 这项中文故意放了3个字节,通常人都会犯UTF-8的错误,我认为.java文件你可以保存为UTF-8编码的,编译成中间文件 .class 你也可以编译成UTF-8编码的,但是程序运行时就是以unicode为准,即运行时,char a = ‘a‘就是在内存中 占用2个字节。
D:原因同a
pom.xml里的 如下配置都是指外码。
JVM中内码采用UTF16。早期,UTF16采用固定长度2字节的方式编码,两个字节可以表示65536种符号(其实真正能表示要比这个少),足以表示当时unicode中所有字符。但是随着unicode中字符的增加,2个字节无法表示所有的字符,UTF16采用了2字节或4字节的方式来完成编码。Java为应对这种情况,考虑到向前兼容的要求,Java用一对char来表示那些需要4字节的字符。所以,java中的char是占用两个字节,只不过有些字符需要两个char来表示。
详细:
[https://docs.oracle.com/javase/tutorial/i18n/text/unicode.html]
[http://www.zhihu.com/question/27562173]
Java的class文件采用UTF8来存储字符,也就是说,class中字符占1~6个字节。
Java序列化时,字符也采用UTF8编码,占1~6个字符。
上一篇:常用的排序算法及其适用场景
下一篇:(Java) 文件打包工具类
文章标题:java的char类型,只有两个字节,为什么可以存储汉字?java中 char详解
文章链接:http://soscw.com/index.php/essay/43093.html