String长度限制

String长度有限制吗?是多少?

Java中String是有长度限制的,在JVM编译中还有规范。 String其实是使用的一个char类型的数组来存储字符串中的字符的。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence,
               Constable, ConstantDesc {

    @Stable
    private final byte[] value;

    public int length() {
        return value.length >> coder();
    }

从 length() 函数看,返回的是 int 类型,是否表示长度就是 int 的最大值 2^31,大概是 4G ?

The answer is no!!!

JVM 规范另有规定。字面量形式定义的 String,存放在常量池,JVM 对常量词中的 String 有限制,多长,依赖于虚拟机的定义。

CONSTANT_String_info {
    u1 tag;
    u2 string_index;
}

这里定义的 u2 string_index 表示的是常量池的有效索引。

在class文件中u2表示的是无符号数占2个字节单位,我们知道1个字节占8位,2个字节就是16位 ,那么2个字节能表示的范围就是2^16- 1 = 65535。

总结

首先,字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int,理论上长度可以是 2^31,接近 4G。

但是,虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了u2,就是无符号占2个字节,2个字节可以表示的最大范围是2^16 -1 = 65535,由于JVM需要1个字节表示结束指令,所以这个范围就为65534了。


结论,String 的长度限制 在 65534。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值