Java String에는 몇 글자를 사용할 수 있습니까?
SPOJ(Speer Online Judge)에서 최대 100만 자리수의 정수에 대한 회문(palindrome)을 찾아야 하는 다음 회문(Next Palindrome) 문제를 시도하고 있습니다.Java의 함수를 사용하여 Strings를 반전시키는 것도 생각해 보았습니다만, String의 길이는 이 정도입니까?
길이의 문자열을 얻을 수 있어야 합니다.
Integer.MAX_VALUE
항상 2,194,483,647 (231 - 1)
(Java 사양에 의해 정의되며, String 클래스가 내부 스토리지에 사용하는 어레이의 최대 크기)
또는Half your maximum heap size
(각 문자가 2바이트이기 때문에) 어느 쪽이든 작습니다.
2^31-1자까지는 내부 배열로 유지되며, Java에서는 정수로 배열이 색인화되어 있기 때문에 사용할 수 있다고 생각합니다.
이론상으로는 할 수 있지만요.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에서는 문자열이 바이트[]를 사용합니다.즉, 멀티바이트 문자는 1바이트를 초과하여 최대값을 더 줄입니다.예를 들어 이모티콘과 같은 4바이트 코드 포인트가 모두 있는 경우 약 5억 문자만 얻을 수 있습니다.
사용하실 생각은 없으십니까?BigDecimal
대신String
어떻게 할 수 있을까요?
정수.MAX_VALUE는 문자열의 최대 크기 + 메모리 크기에 따라 다르지만 구체의 온라인 문제에서는 이러한 기능을 사용할 필요가 없다고 판단됩니다.
Java9은 바이트[]를 사용하여 String.value를 저장하기 때문에 Java9에서는 약 1GB의 문자열만 얻을 수 있습니다.반면 Java8은 2GB 스트링을 사용할 수 있습니다.
문자란, 일부 문자는 BMP(일부 이모티콘 등)로 나타낼 수 없기 때문에, 보다 많은 문자(현재 2자)가 필요합니다.
힙 부분이 더 나빠진다, 친구들아.UTF-16은 16비트로 제한되지 않으며 32비트까지 확장 가능
언급URL : https://stackoverflow.com/questions/1179983/how-many-characters-can-a-java-string-have
'source' 카테고리의 다른 글
Java에서 JSON을 사용한HTTP POST (0) | 2022.08.17 |
---|---|
Vuex 모듈에서 작업을 디스패치하려고 해도 작동하지 않습니다.[vuex] 알 수 없는 작업 유형 (0) | 2022.08.17 |
java에서 null이 있는 형식 캐스팅 중 예외가 없습니다. (0) | 2022.08.17 |
Maven 2 빌드 클래스 패스에 설치 없이 jars를 추가할 수 있습니까? (0) | 2022.08.17 |
스크립트 태그 vue2의 js 코드에서 사용자 지정 이벤트 듣기 (0) | 2022.08.17 |