首页 > 编程知识 正文

java中的char类型占用几个字节,Java中char占几个字节

时间:2023-05-03 12:54:50 阅读:178548 作者:2155

首先区分unicode和UTF。

unicode :Unicode (统一代码、unicode、单代码)是计算机科学领域的行业标准,包括字符集和编码。 Unicode是为了解决传统字符编码的局限性而出现的,它为每种语言的每个字符设置了统一、唯一的二进制代码,以满足跨语言、跨平台的文本转换和处理要求。 统一的字符编号,仅提供字符和编号之间的映射。 符号的数量持续增加,已经超过了百万。 详情: [ https://zh.Wikipedia.org/zh-cn/unicode ]

UTF :unicode转换格式(unicode transformation format )。 定义编号在unicode中的编码方式。 utf8和utf16是那两种实现方式。 这里,utf8是可变长度显示,在长度可能情况下为1~6字节; utf16是可变长度表示,长度可能是2或4字节。 详情: utf8 [ https://zh.Wikipedia.org/zh-cn/utf-8 ] ut F16 [ https://zh.Wikipedia.org/zh-cn/utf-16 ]

其次,必须明确内部编码(internal encoding )和外部编码(external encoding )。

内码:当执行某种语言时,其char和string在存储器中的编码方式。

外码:除了内码以外是外码。

请注意,编译源代码生成的目标代码文件(可执行文件或类文件)的编码方式是外部代码。

先看看内码吧

JVM中内码采用UTF16。 早期,UTF16采用固定长度的双字节编码,两个字节可以表示65536种符号,足以表示当时unicode中的所有字符。 但是,随着unicode中字符的增加,双字节不能表示所有字符,而UTF16使用双字节或四字节完成编码。 为了解决这种情况,考虑到前向兼容性要求,Java用一对char表示需要4个字节的字符。 因此,Java char占用两个字节,但某些字符需要两个char。

详细信息:

[ https://docs.Oracle.com/Java se/tutorial/i18n/text/unicode.html ]

[ http://www.zhi Hu.com/question/27562173 ]

外码

Java的class文件采用UTF8来存储字符。 也就是说,在class中字符占1~6个字节。

Java序列化时,字符也采用UTF8编码,占1~6个字符。

publicclassbytesofchar { public static byte [ ] getbytes utf8 (charc ) charsetcs=charset.forname ) ' utf-8 '; charbuffercb=char buffer.allocate (1; CB.put(c ); cb.flip (; bytebufferbb=cs.encode(CB ); return bb.array (; }公共静态字节[ ] getbytes gbk (charc ) charsetcs=charset.forname ) (gbk ); charbuffercb=char buffer.allocate (1; CB.put(c ); cb.flip (; bytebufferbb=cs.encode(CB ); return bb.array (; } publicstaticvoidmain (string [ ] args ) throwsunsupportedencodingexception (charc=' a ' ); char cc='中'; String str='a '; String strr='中'; String s='a '; 在system.out.println(utf8: )中编码; system.out.println(char值为英语字符所占的字节长度: ) getbytesutf8(c ).length ); system.out.println(char值为中文字符所占的字节长度: ) getbytesutf8(cc ).length ); System.out.println (代码为GBK ) : ) ); system.out.println(char值为英语字符所占的字节长度: ) getbytesgbk(c ).length ); system.out.println(char值为中文字符所占的字节长度: ) getbytesgbk(cc ).length ); system.out.print ln (------------ ); 在system.out.println(utf8 )中编码; system.out.println(string为英文字母所占的字节长度: ) str.getbytes (utf-8 ).length ); system.out.println(string为中文字符所占的字节长度: ) strr.getbytes (utf-8 ).length ); System.out.println (代码为GBK: ); system.out.println(string为英文字母所占的字节长度: ) str.getbytes (gbk ).length ); system.out.println(string为中文字符所占的字节长: ) strr.getbytes (gbk ).length ); system.out.println(string为英文字母(全角)所占的字节长: ) s.getbytes (gbk ).length ); }结果: UTF8:char值为英文字符的字节长度:1char值为中文字符的字节长度:3编码为GBK (默认编码)。char值为英文字符所占的字节长度:2char值为, 被编码为中文字符所占字节长33602---------- utf8 string为英文字符所占的字节长:3的英文字符所占的字节长:1String为中文字母所占的字节长

java中内码(执行内存)的char采用UTF16格式编码,一个char占用两个字节,但有些字符必须用两个char表示。 因此,一个字符占用2或4个字节。 在java中外代码中,char用UTF8格式编码,一个字符占用1到6个字节。 在. UTF16编码中,英语字符占用两个字节。 大部分汉字,特别是常用汉字占2个字节,单个汉字(后期增加unicode码的汉字,常见的冷僻字)占4个字节。 在UTF8编码中,英语字符占用一个字节。 大多数汉字占3个字节,单个汉字占4个字节。 编码是GBK (默认编码) :char值为英文字符,中文字符的字节长度为:2

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。