java中char是几个字节_关于java中char占几个字节,汉字占几个字节

java中char是几个字节_关于java中char占几个字节,汉字占几个字节我们平常说 java 中 char 占 2 个字节 可又说汉字在不通的编码格式中所占的位数是不同的 比如 gbk 中汉字占 2 个字节 utf8 中多数占 3 个字节 少数占 4 个 而所有汉字在 java 程序中我们都可以简单的用 charc 字 表示 那么问题来了 在 java 程序运行的时候 究竟汉字占几个字节呢 在讨论这个问题之前 我们需要先区分 unicode 和

我们平常说,java中char占2个字节,可又说汉字在不通的编码格式中所占的位数是不同的,比如gbk中汉字占2个字节,utf8中多数占3个字节,少数占4个。而所有汉字在java程序中我们都可以简单的用 char c = ‘字’ 表示; 那么问题来了,在java程序运行的时候,究竟汉字占几个字节呢?

————————–

在讨论这个问题之前,我们需要先区分unicode和UTF。

1、unicode :统一的字符编号,仅仅提供字符与编号间映射。符号数量在不断增加,已超百万。详细:[https://zh.wikipedia.org/zh-cn/Unicode]

2、UTF :unicode转换格式 (unicode transformation format) 。定义unicode中编号的编码方式。utf8和utf16便是其中两种实现方式。其中utf8为变长表示,长度可能时1~6个字节;utf16为变长表示,长度可能是2或4个字节。详细:UTF8 [https://zh.wikipedia.org/zh-cn/UTF-8] UTF16 [https://zh.wikipedia.org/zh-cn/UTF-16]

接着,要分清内码(internal encoding)和外码(external encoding)。

1、内码 :某种语言运行时,其char和string在内存中的编码方式。

2、外码 :除了内码,皆是外码。

要注意的是,源代码编译产生的目标代码文件(可执行文件或class文件)中的编码方式属于外码。

先看一下内码

JVM中内码采用UTF16。早期,UTF16采用固定长度2字节的方式编码,两个字节可以表示65536种符号(其实真正能表示要比这个少),足以表示当时unicode中所有字符。但是随着unicode中字符的增加,2个字节无法表示所有的字符,UTF16采用了2字节或4字节的方式来完成编码。Java为应对这种情况,考虑到向前兼容的要求,Java用一对char来表示那些需要4字节的字符。所以,java中的char是占用两个字节,只不过有些字符需要两个char来表示。

详细:

外码

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

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

总结:

1、java中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,但是某些字符需要两个char来表示。所以,一个字符会占用2个或4个字节。

2、java中外码中char使用UTF8的方式编码,一个字符占用1~6个字节。

3、UTF16编码中,英文字符占两个字节;绝大多数汉字(尤其是常用汉字)占用两个字节,个别汉字(在后期加入unicode编码的汉字,一般是极少用到的生僻字)占用四个字节。

4、UTF8编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。

———————————————-

综上,java运行时采用utf16编码,多数汉字占2个字节,一个char就够了,少数占4个字节,需要两个char来表示。

说明:utf16中,通常汉字2字节,CJKV扩展B区、扩展C区、扩展D区的汉字占4个字节。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228511.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:51
下一篇 2026年3月16日 下午6:51


相关推荐

  • 图解DataGridView编辑列

    WinForm中DataGridView功能强大,除了可以自动绑定数据源外,还可以根据需求编辑列。下面以截图说明添加编辑列的步骤(HoverTreeSCJ项目实际界面)。1.选择DataGridVi

    2021年12月27日
    48
  • QGIS 3.0 使用教程

    QGIS 3.0 使用教程网易云课堂:https://study.163.com/course/courseMain.htm?courseId=1005249002&utm_campaign=commission&utm_source=cp-400000000343054&utm_medium=share课程中所需要的数据和地图服务地址从这里下载:链接:https://pan…

    2022年6月16日
    34
  • 博文视点大讲堂第30期——职场新人胜出的关键点

    博文视点大讲堂第30期——职场新人胜出的关键点

    2021年8月6日
    63
  • 什么是UML,UML类图

    什么是UML,UML类图1 什么是 UML nbsp nbsp nbsp nbsp UML 是统一建模语言 是一种可视化的面向对象建模语言 是一种用来对真实世界物理进行建模的标准标记 用图形方式表现典型的面向对象系统的整个结构 它的作用域不局限于支持面向对象的分析与设计 还支持从需求分析开始的软件开发的全过程 nbsp nbsp UML 的概念包括了 UML 语义 Semantics 和 UML 表示符 Notation 两个部分 UML 语义定义了静态模型和动态模型

    2026年3月19日
    2
  • OllyDBG教程

    OllyDBG教程一 OllyDBG nbsp 的安装与配置 OllyDBG nbsp 1 10 nbsp 版的发布版本是个 nbsp ZIP nbsp 压缩包 只要解压到一个目录下 运行 nbsp OllyDBG exe nbsp 就可以了 汉化版的发布版本是个 nbsp RAR nbsp 压缩包 同样只需解压到一个目录下运行 nbsp OllyDBG exe nbsp 即可 OllyDBG nbsp 中各个窗口的功能如上图 简单解释一下各个窗口的功能 更详细的内容可以参考 nbsp TT nbsp 小组翻译的中文帮助 反汇编窗

    2026年3月16日
    2
  • alibaba fastjson jsonarray转list[通俗易懂]

    alibaba fastjson jsonarray转list[通俗易懂]Stringavatar=teacherEntity.getAvatar();if(!StringUtils.isEmpty(avatar)){List<JSONObject>list=JSONObject.parseArray(avatar,JSONObject.class);Stringava=(String)list.get(0).get(“filePath”);tea

    2022年6月23日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号