1个字符=2个字节?晕了。。。

computerlibin 2012-01-07 11:33:30
最近学java学的有点乱,书上说char类型长度为2个字节,加入我声明char c='张',我用utf-8编码此java文件,utf-8中一个汉字不是3个字节吗?那么3个字节怎么存到长度为2的c中?
...全文
193 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_x_w1226 2012-01-08
  • 打赏
  • 举报
回复
3、6楼的姐姐讲的太好了,一看就明白了!!!
学习了!!!
computerlibin 2012-01-08
  • 打赏
  • 举报
回复
明白了,讲得很清楚,谢谢啦![Quote=引用 6 楼 alexandertech 的回复:]

引用 4 楼 computerlibin 的回复:
我这样理解对吗?如果我用utf-8编码char的话,那么.java文件中的中文char在磁盘上是用3个字节来存储的,但当把.java文件编译为.class文件时这个中文char会被转化为2个字节的unicode编码。这就是你说的两个场合吧?


要注意的是,内存中的中文字符来源未必一定来自class文件,也可能来自运行时才读入的数据,比……
[/Quote]
飞跃颠峰 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 computerlibin 的回复:]
我这样理解对吗?如果我用utf-8编码char的话,那么.java文件中的中文char在磁盘上是用3个字节来存储的,但当把.java文件编译为.class文件时这个中文char会被转化为2个字节的unicode编码。这就是你说的两个场合吧?
[/Quote]

要注意的是,内存中的中文字符来源未必一定来自class文件,也可能来自运行时才读入的数据,比如程序运行时从磁盘打开一个数据文件读入内存。
我不能确定class文件中它的编码规则,也许跟编译时指定的字符集有关。但如果它来自.class文件,class文件中是以何种方式编码也是无关紧要的。因为无论它来自哪里,在内存中都是2个字节的unicode编码。
computerlibin 2012-01-08
  • 打赏
  • 举报
回复
有点长,明天再看,谢谢![Quote=引用 2 楼 ldh911 的回复:]

看看这里就知道了:
http://zh.wikipedia.org/wiki/UTF-8

——其他极少使用的Unicode 辅助平面的字符使用四字节编码。
[/Quote]
computerlibin 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 alexandertech 的回复:]

utf-8汉字确实是3个字节
所以如果你用utf-8编码此java文件,java源码文件(.java)中汉字是三个字节
java程序在JVM中运行时,每个char以Jvm内置的Unicode编码,在内存中占2个字节,Jvm会自动转码的
磁盘上的java源程序和执行时的内存存储器,这两个场合你要区分清楚。
事实上在内存中占几个字节无所谓,因为肉眼无法看到,保存到磁盘文件中或者传输给网页显示……
[/Quote]
我这样理解对吗?如果我用utf-8编码char的话,那么.java文件中的中文char在磁盘上是用3个字节来存储的,但当把.java文件编译为.class文件时这个中文char会被转化为2个字节的unicode编码。这就是你说的两个场合吧?
飞跃颠峰 2012-01-07
  • 打赏
  • 举报
回复
utf-8汉字确实是3个字节
所以如果你用utf-8编码此java文件,java源码文件(.java)中汉字是三个字节
java程序在JVM中运行时,每个char以Jvm内置的Unicode编码,在内存中占2个字节,Jvm会自动转码的
磁盘上的java源程序和执行时的内存存储器,这两个场合你要区分清楚。
事实上在内存中占几个字节无所谓,因为肉眼无法看到,保存到磁盘文件中或者传输给网页显示时才比较重要。
MiceRice 2012-01-07
  • 打赏
  • 举报
回复
看看这里就知道了:
http://zh.wikipedia.org/wiki/UTF-8

——其他极少使用的Unicode 辅助平面的字符使用四字节编码。
MiceRice 2012-01-07
  • 打赏
  • 举报
回复
UTF-8存储汉字是变长的,长度在 2~3个字节。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧