java string 最大长度_String的最大长度是多长

初看到这个问题心里还是有点尴尬的,平时确实没注意过String最大能有多长。想要知道String到底有多长,只能从源码层面来找答案了。

Java中String不是基本数据类型,而是引用类型并且是final。String定义为final的原因:

高效性

JVM在查找字符串的时候可以直接定位到String类中,更准确的说String不可变,才能实现常量池。

安全性

定义成final,不能被继承和修改,可以防止在子类或者其他地方被修改,导致隐藏Bug产生。

上面提到常量池,JVM创建对象是需要开销的,为了提高性能,对字符串使用字符串常量池进行了优化,每当我们创建一个字符串时,Jvm先去字符串常量池检查,如果字符串常量池存在,直接返回实例引用;否则创建实例,并存入字符串常量池中。

比如常见的判断:

String a="hello";

String b="hello";

因为a和b都是指向"hello"这个常量池中的常量,即同一个地址所以a==b 为true

String c=new String("hello");

因为c是new了一个新对象,且对象是在堆上存放,所以c==a为false,虽然c的内容是创建在堆中,但是他的内部value还是指向JVM常量池的hello的value,它构造hello时所用的参数依然是hello字符串常量。

77064e569b4d

a、b、c内存关系(图片来源见水印)

下面正式进入今天的主题了,String的最大长度到底是多大呢?

翻开String类的源码,你会看到:

// private final char value[];

private final int count;

public int length() {

final boolean STRING_COMPRESSION_ENABLED = true;

if (STRING_COMPRESSION_ENABLED) {

// For the compression purposes (save the characters as 8-bit if all characters

// are ASCII), the least significant bit of "count" is used as the compression flag.

return (count >>> 1);

} else {

return count;

}

}

可以看到String的length是通过count值返回的,count是int型,最大为231-1,所以String理论上最大长度为231-1,2147483647。

但是由于String底层是通过char[]字符数组来实现,char占用两个字节,2147483647 个 char 类型就是 4294967294 字节,这接近于 4GB 大小,想要申请这么一大块连续的内存空间,失败也就不足为奇了,所以和电脑的硬件条件有关。

总结

String 的最大长度也就是字符数组的最大长度,理论上最大长度为 int 类型的最大值,即 2147483647。

在实际中,一般可获取的最大值小于理论最大值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值