请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

上一节不是提到中文大部分占两个字节码,为啥这里会除以 3

如果字符串中是汉字,那么长度是 65535/3,上一节讲在 class 文件中中文字符大部分占两个字节,这里为什么不是除以 2

正在回答

2回答

前一节讲的是内存,内存里面存的是Utf16编码,汉字多数占两个字节,也有4个字节的,如果你在控制台打印出来还会多两个字节的字节序标志;字节码里面存的是mutf8编码,汉字一般占3个字节。主要编码不同

1 回复 有任何疑惑可以回复我~
  • 提问者 慕九州6385248 #1
    多谢老师
    回复 有任何疑惑可以回复我~ 2019-11-25 23:42:33
  • 我是彻底晕了
    回复 有任何疑惑可以回复我~ 2020-09-27 22:14:23
  • 在java7-8中String以char[]数组存字符串,char是2个字节。String最大有65534个字节数,全都用来存拉丁字母,是不是最多只能存65534/2个字母,也就是最大字符数是65534/2?那存汉字呢?
    回复 有任何疑惑可以回复我~ 2020-10-18 19:56:45
bennyhuo 2020-10-18 20:55:19

回复问汉字存储的同学,视频当中有详细讲解,受限于较多的因素,例如字节码存储的限制,汉字以 MUTF-8 编码的字节存储于字节码当中等等

https://img1.sycdn.imooc.com//szimg/5f8c3b0309f0166916760733.jpg

当然,这只是其中的一种情况,详细的分析还是看视频吧。不知道同学对视频当中那部分内容有疑问?

0 回复 有任何疑惑可以回复我~
  • 好的哈。但还没深刻到理解java8中以char[]存入字符,对数量的限制??如果在java9,改成byte[]存储,确实可以存最多65534个字母
    回复 有任何疑惑可以回复我~ 2020-10-18 21:45:00
  • java9只是为了在存ascii码中的字符时节省内存,因为ascii码的字符一个字节就够了,而char占两个字节,在存中文时没什么区别。
    回复 有任何疑惑可以回复我~ 2020-10-18 22:21:44
  • 存中文是的。我这样理解对吗?Java8的字符串是不是存拉丁字母最多是65534/2=32767,因为最多字节数是65534,String是用char数组存储,而char占2个字节,所以是65534/2。
    回复 有任何疑惑可以回复我~ 2020-10-19 00:45:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信