web-dev-qa-db-fra.com

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

Je m'interrogeais sur la mise en œuvre 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'agissait d'une méthode/fonction ou s'il s'agissait simplement d'un membre de données de Array?

J'imagine qu'il doit s'agir d'un membre de données, car nous n'utilisons pas de parenthèse() pour l'invoquer. Mais s’il s’agit d’un membre de données, comment/quand la valeur de cette length est-elle affectée/calculée?

37
source.rar

Selon les spécifications du langage Java (en particulier §10.7 Membres de tableau ), il s’agit d’un champ:

  • Le champ publicfinallength, qui contient le nombre de composants du tableau (la longueur peut être positive ou égale à zéro).

En interne, la valeur est probablement stockée quelque part dans l'en-tête de l'objet, mais il s'agit d'un détail d'implémentation qui dépend de l'implémentation concrète de la JVM.

Le HotSpot VM (celui du célèbre JRE/JDK Oracle (anciennement Sun)) enregistre la taille dans l’en-tête de l’objet :

Les tableaux ont un troisième champ d'en-tête, pour la taille du tableau.

40
Joachim Sauer

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

À partir du didacticiel Arrays :

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

17
Bill the Lizard

Si vous avez un tableau de type connu ou est une sous-classe de Object [], vous pouvez commencer par le cast.

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]);
4
Peter Lawrey

Oui, ça devrait être un champ. Et je pense que cette valeur est assigné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];).

1
Michael Obidin

Du JLS:

La longueur du tableau est disponible en tant que longueur variable de l'instance finale

Et:

Une fois qu'un objet de tableau est créé, son la longueur ne change jamais. Faire un tableau variable fait référence à un tableau de longueur différente, une référence à un un tableau différent doit être assigné à la variable.

Et les tableaux sont implémentés dans la JVM. Vous voudrez peut-être consulter la spécification VM pour plus d'informations.

0
planetjones

C'est un champ public final pour le type de tableau. Vous pouvez vous référer au document ci-dessous:

http://Java.Sun.com/docs/books/jls/third_edition/html/arrays.html#10.7

0
James Jithin

Chaque tableau en Java est considéré comme un objet. Le public final length est le data member qui contient le nombre de composants du tableau (length peut être positif ou nul)

0
Manimaran Selvan

Les tableaux Java, comme les tableaux C++, ont une longueur fixe qui, après l'initialisation, ne peuvent pas être modifiés. Mais, comme le modèle de classe vecteur - vector <T> - en C++, vous pouvez utiliser la classe Java ArrayList qui comporte beaucoup plus d’utilitaires que les baies Java.

0
Infintyyy

Je crois que c'est juste une propriété lorsque vous y accédez en tant que propriété.

String[] s = new String[]{"abc","def","ghi"}
System.out.println(s.length)

renvoie 3

si c’était une méthode, vous appeleriez alors s.length() right?

0
netbrain