开发者社区> 问答> 正文

为什么 CONSTANT_Utf8_info型常量的最大长度是是65535?

各位 我看深入理解java虚拟机中说CONSTANT_Utf8_info型常量的最大长度是是65535 但是,实验证明,String s = “”;中,最多可以有65534个字符。如果超过这个个数。就会在编译期报错。 u2是无符号的16位整数,因此理论上允许的的最大长度是2^16=65536。而 java class 文件是使用一种变体UTF-8格式来存放字符的,null 值使用两个 字节来表示,因此只剩下 65536- 2 = 65534个字节。 差了1个在哪?
来源:云原生后端社区


https://www.yuque.com/server_mind/answer

展开
收起
Atom 2020-04-25 16:25:20 2398 0
2 条回答
写回答
取消 提交回答
  • 他的length的长度最大是2个字节, bytes 的数组最大长度2的16次方-1 (1111 1111),和null没有关系。 从“\u0001” ~ "\u007f"都可以用一个字节表示。

    2022-03-23 12:48:25
    赞同 展开评论 打赏
  • CONSTANT_Utf8_info 中有 u2 length; 表明了该类型存储数据的长度。 u2 是无符号的 16 位整数,因此理论上允许的的最大长度是 2^16=65536。而 java class 文件是使用一种变体 UTF-8 格式来存放字符的,null 值使用两个 字节来表示,因此只剩下 65536- 2 = 65534 个字节。
    来源:云原生后端社区


    https://www.yuque.com/server_mind/answer

    2020-04-25 16:25:54
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载