Хоча теоретично ви можете використовувати символи Integer.MAX_VALUE, JVM обмежений розміром масиву, який він може використовувати.
public static void main(String... args) {
for (int i = 0; i < 4; 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 Strings використовуватиме байт [], що означатиме, що багатобайтові символи використовуватимуть більше одного байту та зменшують максимум далі. Якщо у вас є всі чотири байтові кодові точки, наприклад, емоджи, ви отримаєте лише близько 500 мільйонів символів