1. Stringtableau

Je voudrais vous donner un bref aperçu des Stringtableaux.

Comme nous l'avons dit précédemment, un tableau peut être de n'importe quel type. Cela signifie que vous pouvez créer un tableau de Strings. Si nous voulions écrire un programme qui "lit 10 lignes à partir du clavier et les affiche dans l'ordre inverse", voici à quoi ressemblerait le code :

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Créer un Scannerobjet
Créer un objet tableau à 10 éléments
Boucler de 0 à 9

Lire une chaîne au clavier et l'enregistrer dans la cellule suivante du tableau
Boucler de 9 à 0

Afficher la cellule suivante du tableau

Le code a à peine changé ! Nous n'avons eu qu'à remplacer intpar Stringlors de la création du tableau. Eh bien, et lors de la lecture de la chaîne à partir du clavier, nous avons également remplacé la nextInt()méthode par nextLine().


2. Stringtableau en mémoire

Et un autre fait utile. Considérons 3 images :

Image 1. Comment un Stringobjet est organisé en mémoire :

Tableau de chaînes en mémoire

Cette photo a été prise lors des cours précédents.

Veuillez noter que le texte de la chaîne n'est pas stocké directement dans la variable : un bloc de mémoire séparé lui est alloué. Une Stringvariable stocke l'adresse (référence) d'un objet qui stocke le texte.

Image 2. Comment un tableau d'entiers est organisé en mémoire :

Tableau de chaînes en mémoire 2

Cette image est également familière.

Image 3. Comment un tableau de chaînes est organisé en mémoire :

Comment un tableau String est organisé en mémoire

Sur la gauche, nous voyons une variable tableau dont le type est String[](elle stocke l'adresse d'un objet tableau).

Au milieu, nous avons Stringl'objet tableau lui-même.

Et à droite se trouvent des objets de chaîne qui stockent du texte.

Les cellules du Stringtableau ne stockent pas les chaînes elles-mêmes (le texte des objets String). Au lieu de cela, ils stockent leurs adresses (références à celles-ci). De la même manière que Stringles variables stockent les adresses des objets de chaîne (où le texte est stocké).

Tenez-en compte lorsque vous comparez des cellules de tableau :

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
Créer un tableau de 10 chaînes

Mettre des valeurs dans le tableau



true (les références sont égales)
false (les références ne sont pas égales)
true (les chaînes sont égales)
true(les chaînes sont toujours égales)


3. Initialisation rapide du tableau en Java

Les tableaux sont super utiles, donc les créateurs de Java ont essayé de rendre leur travail aussi pratique que possible.

La première chose qu'ils ont faite a été de simplifier l'initialisation du tableau, le processus par lequel vous fournissez les valeurs initiales d'un tableau.

Après tout, en plus des données lues quelque part, un programme a aussi très souvent besoin de ses propres données internes pour fonctionner. Par exemple, supposons que nous ayons besoin de stocker les longueurs de chaque mois dans un tableau. Voici à quoi pourrait ressembler le code :

int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December

Mais grâce aux créateurs de Java, il existe un moyen d'écrire ceci de manière plus concise :

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Vous pouvez simplement lister toutes les valeurs du tableau, séparées par des virgules !

Pratique, non ? Mais ce n'est pas tout.

En l'occurrence, le compilateur peut déterminer le type du conteneur (objet tableau) en fonction du type des valeurs du tableau. Et pour déterminer la longueur du tableau, il est trivial de compter le nombre d'éléments écrits entre les accolades.

Cela signifie que ce code peut être écrit encore plus court :

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Une chose de beauté, n'est-ce pas? 🙂

C'est ce qu'on appelle "l'initialisation rapide du tableau". Au fait, cela fonctionne pour les types autres que int...

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};