Sur Java quelle est la taille maximale d'une String
peut avoir, en se référant à la length()
l'appel de la méthode ?
Je sais que length()
retourner la taille d'un String
en tant que char []
;
Sur Java quelle est la taille maximale d'une String
peut avoir, en se référant à la length()
l'appel de la méthode ?
Je sais que length()
retourner la taille d'un String
en tant que char []
;
Le type de retour de la méthode length() de la classe String est int .
public int length()
Consultez le site [http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#length()](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#length())
Donc la valeur maximale de int est 2147483647 .
La chaîne est considérée comme un tableau de caractères en interne, donc l'indexation est faite dans la plage maximale. Cela signifie que nous ne pouvons pas indexer le 2147483648ème membre, donc la longueur maximale de String en Java est de 2147483647.
Le type de données primitives int est de 4 octets (32 bits) en java, étant donné qu'un bit (MSB) est utilisé en tant qu'octet. bit de signe L'intervalle est limité à -2^31 à 2^31-1 (-2147483648 à 2147483647). Nous ne pouvons pas utiliser de valeurs négatives pour l'indexation, donc évidemment la plage que nous pouvons utiliser est de 0 à 2147483647.
Comme mentionné dans La réponse de Takahiko Kawasaki java représente les chaînes de caractères Unicode sous la forme de UTF-8 modifié et dans JVM-Spec Structure CONSTANT_UTF8_info 2 octets sont alloués à la longueur (et non au nombre de caractères de la chaîne).
Pour prolonger la réponse, le ASM jvm bytecode de la bibliothèque putUTF8
méthode contient ceci :
public ByteVector putUTF8(final String stringValue) {
int charLength = stringValue.length();
if (charLength > 65535) {
// If no. of characters> 65535, than however UTF-8 encoded length, wont fit in 2 bytes.
throw new IllegalArgumentException("UTF8 string too large");
}
for (int i = 0; i < charLength; ++i) {
char charValue = stringValue.charAt(i);
if (charValue >= '\u0001' && charValue <= '\u007F') {
// Unicode code-point encoding in utf-8 fits in 1 byte.
currentData[currentLength++] = (byte) charValue;
} else {
// doesnt fit in 1 byte.
length = currentLength;
return encodeUtf8(stringValue, i, 65535);
}
}
...
}
Mais lorsque le mappage des points de code > 1byte, il appelle encodeUTF8
méthode :
final ByteVector encodeUtf8(final String stringValue, final int offset, final int maxByteLength /*= 65535 */) {
int charLength = stringValue.length();
int byteLength = offset;
for (int i = offset; i < charLength; ++i) {
char charValue = stringValue.charAt(i);
if (charValue >= 0x0001 && charValue <= 0x007F) {
byteLength++;
} else if (charValue <= 0x07FF) {
byteLength += 2;
} else {
byteLength += 3;
}
}
...
}
Dans ce sens, la longueur maximale de la chaîne est de 65535 octets, c'est-à-dire la longueur de l'encodage utf-8. et non pas char
compter
Vous pouvez trouver la gamme de points de code Unicode modifiés de JVM, à partir du lien struct utf8 ci-dessus.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
6 votes
Alors que la longueur d'un
String
est théoriquementInteger.MAX_VALUE
la longueur d'une chaîne de caractères littérale dans la source semble être limitée à uniquement 65535 octets de données UTF-8.