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

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] UTF16 [https://zh.wikipedia.org/zh-cn/UTF-16]

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

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

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

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

先看一下内码

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中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,但是某些字符需要两个char来表示。所以,一个字符会占用2个或4个字节。

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

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

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

EOF

java中char是几个字节_Java中char占用几个字节相关推荐

  1. 使用randomaccessfile类将一个文本文件中的内容逆序输出_Java 中比较常用的知识点:I/O 总结...

    Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. 数据流是一串连续不断的数据的集合,就象水 ...

  2. JAVA中char占用多少字节_Java中char占用几个字节

    https://www.cnblogs.com/louiswong/p/6062417.html https://www.cnblogs.com/fnlingnzb-learner/p/7272348 ...

  3. java中字节_java中的变量各占得字节数

    展开全部 1.boolen,8位,占1个字节 2.int,32位,占4个字节 3.float,32位, 占4个字节 4.double,64位,占8个字节 5.char 16位,占2个字节 6.byte ...

  4. java中double类型占几个字节_java中各种数据类型占用字节数

    1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字 ...

  5. java 汉字 字节_java中的汉字占几个字节

    java中的汉字占几个字节 发布时间:2020-06-25 20:02:07 来源:亿速云 阅读:217 作者:Leah 今天就跟大家聊聊有关java中的汉字占几个字节,可能很多人都不太了解,为了让大 ...

  6. java boolean几个字节_Java中boolean类型到底占用多少个字节?

    1.时间:2017-07-03 07:37:06YuanMxy 2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节? 3.问题解答: (1)什么是b ...

  7. java 压缩汉字字节_java中计算汉字的字节数

    中文并不一定是占两个字节的,具体占多少字节是跟具体的编码方式相关的. 比如说:GB2312.GBK.GB18030 编码是占用两个字节的,但是 UTF-8 编码的话至少需要占用三个字节. 有一个简单方 ...

  8. java字符串字节_Java中字符串与byte数组之间的相互转换

    前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...

  9. Java把以0结尾的字符串_Java中字符串为什么不以\0结尾

    其实这个问题没有什么好说的,Java里面一切都是对象,是对象的话,字符串肯定就有长度,即然有长度,编译器就可以确定要输出的字符个数,当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了. 学过C ...

最新文章

  1. php的反射作用是什么意思,php反射的作用是什么
  2. NLP为RPA带来了什么价值?
  3. 大富翁已成过去-我的一些感想
  4. c#调用c++的dll接口
  5. java获取手机安装app_Android之——获取手机安装的应用程序
  6. 解决ssh登录慢的问题
  7. 服务器托管用户支招选择IDC经验
  8. PackageManagerService源码阅读笔记
  9. YOLOV5网络结构
  10. linux使用光盘镜像(ISO)作为软件源安装软件
  11. Android多窗口模式(分屏模式)
  12. Cesi运行报错AttributeError: can‘t set attribute
  13. Unity VFX粒子系统入门笔记-2-制作简易火焰特效
  14. 移动拨号上网开热点(不是360开热点,而是使用电脑自带的热点功能)详解
  15. MySQL数据库灵魂拷问
  16. Andrew Ng机器学习课程笔记--week9(下)(推荐系统协同过滤)
  17. 串的定长顺序存储结构|C++实现
  18. 神经性脚臭案例整理(五)
  19. 谈谈技术债务的定义,影响以及管理
  20. 八进制、十进制、操作符(day04)

热门文章

  1. 活久见!谷歌开源“大杀器”,CV、NLP都能用!
  2. 参考文献必备神器:这个插件能快速知道收藏的论文是否靠谱
  3. AI论文代码强制开源?“我反对!”
  4. 欠阿里云一分钱,会是什么样的后果...
  5. 文言文能编程了,口水战也开始了
  6. Nginx源码分析:epoll事件处理模块概述
  7. Flask之请求钩子
  8. 从上到下打印二叉树 II
  9. 爬虫之常见的验证码的种类
  10. 简单邮件传送协议SMTP