各位 我看深入理解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
他的length的长度最大是2个字节, bytes 的数组最大长度2的16次方-1 (1111 1111),和null没有关系。 从“\u0001” ~ "\u007f"都可以用一个字节表示。
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。