40 votes

Comment la longueur est-elle implémentée dans les tableaux Java?

Je me posais des questions sur l'implémentation de length d'un tableau Java. Je sais que l'utilisation de arrayName.length nous donne le nombre d'éléments dans le tableau, mais je me demandais s'il s'agit d'une méthode / fonction ou s'il s'agit simplement d'un membre de données d'Array?

Je suppose que ce doit être un membre de données car nous n'utilisons pas de parenthèses () lors de l'invocation. Mais s'il s'agit d'un membre de données, comment / quand la valeur de ce length affectée / calculée?

41voto

Joachim Sauer Points 133411

Selon le Langage Java Specification (spécifiquement §10.7 les Membres du groupe) c'est un champ:

  • L' public final domaine length, qui contient le nombre de composants de la matrice (la longueur peut être positif ou nul).

En interne, la valeur est probablement stocké quelque part dans l'en-tête objet, mais c'est un détail d'implémentation, et dépend du béton JVM.

Le HotSpot VM (celui de la populaire Oracle (anciennement Sun) JRE/JDK) stocke la taille de l'objet-d'en-tête:

[...] les matrices ont un troisième champ d'en-tête, pour la taille de la matrice.

18voto

Bill the Lizard Points 147311

Vous avez raison, length est un membre de données, pas une méthode.

À partir du didacticiel sur les tableaux :

La longueur d'un tableau est établie lors de sa création. Après la création, sa longueur est fixe.

4voto

Peter Lawrey Points 229686

Si vous avez un tableau d'un type connu ou si vous êtes une sous-classe d'Object [], vous pouvez d'abord transtyper le tableau.

 Object array = new ????[n];
Object[] array2 = (Object[]) array;
System.out.println(array2.length);
 

ou

 Object array = new char[n];
char[] array2 = (char[]) array;
System.out.println(array2.length);
 

Cependant, si vous ne savez pas de quel type de tableau il s'agit, vous pouvez utiliser Array.getLength (Object);

 System.out.println(Array.getLength(new boolean[4]);
System.out.println(Array.getLength(new int[5]);
System.out.println(Array.getLength(new String[6]);
 

1voto

Michael Obidin Points 11

Oui, ce devrait être un champ. Et je pense que cette valeur est attribuée lorsque vous créez votre tableau (vous devez choisir la longueur du tableau lors de la création, par exemple: int[] a = new int[5]; ).

0voto

Infintyyy Points 53

Les tableaux Java, comme les tableaux C ++, ont la longueur fixe qu'après l'initialisation, vous ne pouvez pas modifier. Mais, comme le vecteur de modèle de classe - vector <T> - en C ++, vous pouvez utiliser la classe Java ArrayList qui a beaucoup plus d'utilitaires que les tableaux Java.

Prograide.com

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.

Powered by:

X