在讨论这个问题之前,我们需要先区分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

char几个字节java_Java中char占用几个字节相关推荐

  1. int 几个字节 java_Java中char,short,int,long占几个字节和多少位

    1.字节:byte:用来计量存储容量的一种计量单位:位:bit 2.一个字节等于8位  1byte = 8bit char占用的是2个字节 16位,所以一个char类型的可以存储一个汉字. 整型: b ...

  2. char几个字节java_java中char占几个字节?

    java中char占几个字节? java中的一个char占用2个字节.java采用unicode,2个字节来表示一个字符. 一个数字或英文或汉字都是一个字符,只不过数字和英文时,存储的2个字节的第一个 ...

  3. java中char是几个字节_Java中char占用几个字节

    在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...

  4. mysql中char是什么意思_mysql中char与varchar的区别

    在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔 ...

  5. char几个字节java_java中的char占几个字节实例分析

    java中的char占几个字节实例分析 1:"字节"是byte,"位"是bit : 2: 1 byte = 8 bit : char 在Java中是2个字节.j ...

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

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

  7. char型变量声明java_java中变量的声明和变量的类型

    1.变量的概念: 内存中的一个存储区域该区域有自己的名称(变量名)和类型(数据类型)Java中每个变量必须先声明,后使用该区域的数据可以在同一类型范围内不断变化 使用变量注意: 变量的作用域:一对{ ...

  8. python中char是什么意思_MySQL中char和varchar的区别是什么

    MySQL中char和varchar的区别是什么 区别一.定长和变长的区别 1.char 表示定长,长度固定: 2.varchar表示变长,即长度可变. 当所插入的字符串超出它们的长度时,视情况来处理 ...

  9. python里char什么意思_编程中“char”是什么意思?

    展开全部 其为定义字符型变量. char用于C或C++中定义字符型变量,只占一636f707962616964757a686964616f31333433623137个字节,取值范围为 -128 ~ ...

最新文章

  1. 从今天开始,我就要潜心研究软件开发技术了,不在被名利所困
  2. 系统linux/redhat6.5 zabbix 2.47监控nginx1.8.0 (下)
  3. ubuntu12.04没有输入法。。
  4. 操作系统储存管理功能
  5. 高速电路EDA设计第一次实验
  6. mix2s android p内测,历时一个月,MIX2S成小米首款Android P公测机型
  7. ZOJ 3702 Gibonacci number(数学推导题)
  8. 高朋F团QQ团 三品牌合力激战团购市场
  9. Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS
  10. 操作系统之文件管理:7、文件的系统层次
  11. python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
  12. 18. PHP 表单验证
  13. SQLite的查询优化
  14. JS每晚24:00更新某方法
  15. 2015境外人气餐厅榜单!你吃过几家?
  16. .playground文件_部署可教学机器:Circuit Playground Express,Arduino,P5.js,TinyUSB
  17. 微信中的黑科技你知道吗?
  18. 重回华语乐坛神仙打架的时代——飞利浦S302圈铁耳机评测
  19. FLUENT提供了9个湍流模型,教你如何选择
  20. 【MYSQL】ERROR 1366 (HY000)

热门文章

  1. 为什么现在网安培训机构风评不行?
  2. 创意电子学-小知识:如何使用面包板
  3. 给我写个10000字的微信预约座位小程序论文
  4. Postman:断言响应返回列表长度以及返回异常or空值
  5. Docker 的未来
  6. 区块链公司谈区块链未来走向
  7. mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解
  8. Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
  9. 红米note114g和5g区别 红米note114g和5g外观有区别吗
  10. 男生学计算机还是自动化,男生最吃香的十大专业,怎么样的专业更有前景