Maison > Java > javaDidacticiel > le corps du texte

array[] : une classe spéciale gérée en interne par la JVM elle-même

DDD
Libérer: 2024-09-12 20:16:10
original
848 Les gens l'ont consulté

La première façon dont nous sommes tous initiés à l'étude des structures de données en Java (et dans d'autres langages) consiste à utiliser des tableaux. En Java, un tableau est une classe, un objet, un enfant d'Object (comme toutes les classes). Cependant, c'est un cours avec un traitement spécial dans la langue.

Contrairement aux classes et objets courants, la syntaxe des tableaux et leur traitement est géré directement par le compilateur et la JVM (Java Virtual Machine). Cela inclut la manière dont les tableaux sont alloués, manipulés et accessibles. Cette classe ne se trouve pas directement dans le code source.

Java traite automatiquement les tableaux comme des instances de cette classe spéciale.

Si vous exécutez le code ci-dessous, vous verrez les résultats suivants :

public class Main
{
    public static void main(String[] args) {
        int[] intArray = new int[5];
        System.out.println(intArray.getClass().getName());
        System.out.println(intArray.getClass().getSuperclass());
    }
}

Copier après la connexion

[Je
classe java.lang.Object

Ce nom de classe "[I" est juste un nom symbolique généré automatiquement, que la JVM utilise pour représenter un tableau d'entiers (int[]). Chaque type a son propre nom symbolique :

array[]: uma classe especial gerenciada internamente pela própria JVM

Les parenthèses "[" indiquent les dimensions. Un tableau à une dimension est représenté par [, tandis qu'un tableau à deux dimensions est représenté par [[, un tableau à trois dimensions est représenté par [[[... et ainsi de suite.

Déclaration

Pour déclarer et initialiser un tableau, il est important de préciser le type de données et la taille de l'objet :

int[] intArray = new int[5]; //array de tamanho 5
char[] charArray = new char[]{'a', 'b', 'c'}; //o compilador entende que é um array de tamanho 3
double[] doubleArray = {1.2, 1.3, 1.4, 1.5}; //o compilador entende que é um array de tamanho 4
Copier après la connexion

Java vous permet de mettre des crochets dans le nom de la variable au lieu du type, par exemple : int intArray[] = new int[5]. Cependant, cela n'est pas recommandé, car cela s'écarte des conventions.

Les données stockées dans les tableaux peuvent être allouées en mémoire « de manière contiguë », c'est-à-dire séquentiellement, par la JVM. Pour accéder aux données, des index sont utilisés et le premier index d'un tableau est toujours 0 en Java.

Par exemple, pour accéder à la lettre « a » du charArray ci-dessus, vous devez la rechercher par charArray[0]. La lettre « b », quant à elle, se trouve dans charArray[1] et la lettre « c », dans charArray[2]. Si vous essayez d'accéder à un index qui n'existe pas dans le tableau, vous recevrez une erreur « IndexOutOfBounce ». Par exemple, si j'essaie d'accéder à la valeur dans charArray[3].

La taille d'un tableau, une fois définie dans la déclaration, ne peut jamais être modifiée. Si je déclarais que charArray aurait 3 éléments, il n'en contiendrait pas plus. Moins oui... plus non.

Et ici, un addendum. Les valeurs non renseignées dans un tableau prendront la même valeur par défaut que le type du tableau. Par exemple, dans un tableau d'entiers, les valeurs vides seront remplies par 0. Dans un tableau booléen, par false. Dans un tableau de chaînes, avec null.

Tout comme la taille, le type d'un tableau ne peut pas être modifié. Mais il est possible de copier des tableaux de types différents, s'il s'agit de sous-types du même type. Déroutant, non ? Un exemple aide : Integer et Double sont des sous-types de Number. Alors...

Integer[] integerArray = {1, 2, 3};
Number[] numberArray = intgerArray;
Copier après la connexion

Ce code est accepté par le compilateur. Cependant, la prudence est de mise. Si nous faisons cela ici, nous générerons une erreur de compilation :

numberArray[0] = 1.2;
Copier après la connexion

C'est parce que integerArray et numberArray pointent vers le même espace mémoire. Même si numberArray prend en charge un double comme premier élément, ce n'est pas le cas de integerArray et, par conséquent, numberArray n'est pas "autorisé" à modifier la valeur d'index 0.

Mémoire

Un tableau peut toujours stocker des données du même type, acceptant des primitives et des objets. Si le tableau est composé d'entiers, il n'acceptera pas char, double, float, String... seulement des valeurs entières.

Le tableau lui-même est une classe (bien que spéciale) et, par conséquent, est stocké sur le tas. De cette façon, le tableau stocke une adresse mémoire qui, à son tour, contient les valeurs saisies dans le tableau.

Un tableau primitif alloue des blocs de mémoire contigus pour stocker directement les valeurs, tandis qu'un tableau d'objets stocke des références (pointeurs) vers des objets, situés ailleurs dans la mémoire.

Cela signifie que les tableaux de types primitifs (comme int[]) et les tableaux d'objets (comme String[]) sont stockés sur le tas. Dans le cas de tableaux de types primitifs, les valeurs des éléments du tableau sont également stockées directement sur le tas, contigu au tableau lui-même. Dans le cas du tableau d'objets, les objets pointés par ces références peuvent être alloués à différents emplacements sur le tas.

Méthodes

Toutes les classes de tableaux ont des méthodes de longueur et de clonage. Le premier renvoie la taille du tableau et le second fait une copie du tableau vers un autre tableau (dans ce cas, le pointeur vers la même adresse mémoire).

Cependant, en tant qu'enfant de la classe Object (ainsi que de toutes les classes en Java), le tableau possède également les méthodes de superclasse : toString, equals et hashCode.

L'utilisation de tableaux en coulisses, cependant, est ce qui se passe le plus dans la vraie vie. Même si les tableaux sont performants, il est beaucoup plus compliqué d'itérer leurs éléments et il existe des classes qui font des abstractions au-dessus des tableaux qui simplifient grandement la vie du programmeur.

C'est le cas de la classe Arrays (avec lettre majuscule). Il regroupe essentiellement les tableaux dans une classe Java standard et présente une série de méthodes très simples à mettre en œuvre pour travailler avec les données. La classe Arrays présente un autre avantage puissant : elle fonctionne avec une allocation dynamique, il est donc plus facile de gérer les collections - après tout, nous connaissons rarement la taille exacte du tableau dont nous pourrions avoir besoin. La classe Arrays peut étendre la taille de la collection à la demande, sans que le programmeur ait à créer de nouveaux tableaux (avec des lettres minuscules) de plus grandes tailles et à copier les données du tableau précédent, devenu soudainement trop petit.

Les tableaux sont également la base de classes telles que List, Stack et Queue (qui sont essentiellement un wrapper et incluent de très bonnes méthodes pour traiter les données).

Avez-vous déjà pensé que String est une classe qui résume un tableau de caractères ?

array[]: uma classe especial gerenciada internamente pela própria JVM

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal