String长度分析?

String长度的分析?
String的长度一旦定义便成为不可改变,貌似对其大小进行改变时,实际上是在底层重新开辟了一个空间,然后与之前变量名一样,也就是说现在的String对之前的String进行了替换,并不是本质意义上的改变。String底层是用final修饰的char类型的数组实现的,他是不可变的,他不是简单类型的,但是他有没有大小!他最多有多少字符? 一般来说是用 域count来记录对象字符的数量,因为count的类型是int类型,显然的会认为:String的最大长度是2^31 也就是4G,
实际上并不是这样的,在class文件的规范中, constant_utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示 65536个字节,而java class 文件是使用一种变体utf-8格式来存放字符的,null值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。也正是变体utf-8的原因,如果字符串中含有中文等非ascii字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。
我认为可以这样来理解,String底层是char类型数组实现的,而的char的可允许最大字符长度为65536,而String中,null需要两个字符,所以String最大字符为:65534

猜你喜欢

转载自blog.csdn.net/qq_45874107/article/details/112485119