在讨论这个问题之前,我们需要先区分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. 13---Net基础加强
  2. 【负载均衡】揭开F5 BIG-IP的神秘面纱(一)
  3. 星外主机管理系统可以装到内网_智慧消防管理系统_消防物联网远程管理平台...
  4. MyBatis-Plus Day2 Wapper 核心功能 条件构造器 测试
  5. c# uri.host_C#| Uri.GetLeftPart()方法与示例
  6. 蓝桥杯 算法训练(四)结点选择(树形动态规划)
  7. 如何设置EditPlus保存时不生成bak文件
  8. tensor.view(*shape) 函数
  9. oracle gENT,Oracle 11g r2 新建空表不分配semgent
  10. VC2005字符集设置容易出错的问题!
  11. 草图大师SketchUp2018下载和安装教程
  12. Android 7.1 PackageInstaller(应用安装器)增加自动点击安装
  13. uniapp微信小程序订阅消息发送服务通知--超详细
  14. html特殊符号的表示
  15. Windows7下chm文件打不开
  16. Kinect使用系列
  17. android系统佳明app,佳明garmin运动手表app
  18. 【直击DTCC】浪潮霍俊路详解数据库集群锁机制管理
  19. mysql show-warnings_MySQL-show warnings
  20. 电脑防火墙未使用推荐的设置来保护计算机,防火墙无法使用推荐设置,

热门文章

  1. 有了MacBook,你还缺点啥?
  2. 无法连接到服务器XX;SQLServerAgent无法启动
  3. 外贸催款邮件怎么写才算好?内有模板和技巧
  4. 陕西公办专科学校计算机,2017西安公办专科大学排名
  5. java输出一个空心爱心形
  6. 【观察】华为陈帮华:从行业军团到中小企业,使能千行百业数字化转型
  7. SpringBoot读取excel表格
  8. Word自带公式编辑器输入hat、bar后下表i,j显示不全问题
  9. 红米note114g和5g区别 红米note114g和5g外观有区别吗
  10. 分布式架构演变之路,微服务、限流、熔断....