最大的 String 字符长度是多少?
private final char value[];
public int length() {
return value.length;
}
/**
* @author wupx
* @date 2020/01/13
*/
public class StringTest {
public static void main(String[] args) {
char[] c = new char[Integer.MAX_VALUE];
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at test.StringTest.main(StringTest.java:9)
/**
* @author wupx
* @date 2020/01/13
*/
public class StringTest {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
int len = Integer.MAX_VALUE - i;
try {
char[] ch = new char[len];
System.out.println("len: " + len + " OK");
} catch (Error e) {
System.out.println("len: " + len + " " + e);
}
}
}
}
len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483645 OK
len: 2147483644 OK
len: 2147483643 OK
总结
在 String 类内部,是使用一个字符数组(char[])来维护字符序列的。
String 的最大长度也就是字符数组的最大长度,理论上最大长度为 int 类型的最大值,即 2147483647。
在实际中,一般可获取的最大值小于理论最大值,在我的电脑上得出的最大值是 2 ^ 31 - 3,大家可以在自己的电脑上测试下。