虽然理论上可以使用Integer.MAX_value字符,但JVM在它可以使用的数组的大小上是有限的。public static void main(String... args) {
for (int i = 0; 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);
}
}}
Oracle Java 8更新92打印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
注意:在Java 9中,String将使用字节[],这意味着多字节字符将使用多个字节,并进一步减少最大值。如果你有所有四个字节的代码点,例如表情符号,你只会得到大约5亿个字符。