JAVA 中的String长度

String 的长度:

我们可以使用串接操作符得到一个长度更长的字符串,那么,String 对象最多能容纳多少字符呢?

查看String的源代码我们可以得知类String中是使用域 count 来记录对象字符的数量,而count 的类型为 int,因此,我们可以推测最长的长度为 2^32,也就是4G。

不过,我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串,那么双引号里面的ASCII 字符最多只能有 65534 个。

为什么呢?

因为在class文件的规范中, CONSTANT_Utf8_info 表中使用一个16 位的无符号整数来记录字符串的长度的,最多能表示 65536 个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null 值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。

也正是变体UTF-8 的原因,如果字符串中含有中文等非ASCII 字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。

如果超出这个数量,在编译的时候编译器会报错。

posted @ 2013-09-22 22:03  DenniGuo  阅读(2017)  评论(0编辑  收藏  举报