![b1c2d7985a3061e93194a90b76bc9294.png](https://i-blog.csdnimg.cn/blog_migrate/7d5e522936af8e701275630c5b0e14ef.jpeg)
作者:程序员自由之路
出自:博客园
原文:cnblogs.com/54chensongxia/p/13640352.html
在学习和开发过程中,我们经常会讨论 short ,int 和 long 这些基本数据类型的取值范围,但是对于 String 类型我们好像很少注意它的“取值范围”。那么对于 String 类型,它到底有没有长度限制呢?
其实 String 类型的对象,他们是有长度限制的, String 对象并不能“存储”无限长度的字符串。关于 String 的长度限制要从编译时限制和运行时限制两方面考虑。
编译期限制#
有JVM虚拟机相关知识的同学肯定知道,下面定义的字符串常量“自由之路”会被放入方法区的常量池中。
String s = "自由之路";
System.out.println(s);
Stirng 长度之所以会受限制,是因JVM规范对常量池有所限制。常量池中的每一种数据项都有自己的类型。Java中的UTF-8编码的Unicode字符串在常量池中以CONSTANT_Utf8类型表示。
CONSTANT_Utf8的数据结构如下: