1. Stringarray

Jeg vil gerne give dig et kort overblik over Stringarrays.

Som vi sagde tidligere, kan et array være af enhver type. Det betyder, at du kan oprette en række Strings. Hvis vi ville skrive et program, der "læser 10 linjer fra tastaturet og viser dem i omvendt rækkefølge," her er, hvordan koden ville se ud:

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]);
}
Opret et Scannerobjekt
Opret et 10-element array objekt
Loop fra 0 til 9

Læs en streng fra tastaturet og gem den i næste celle i matrixen
Loop fra 9 til 0

Vis den næste celle i matrixen

Koden ændrede sig næsten ikke! Vi skulle kun erstatte intmed, Stringda vi oprettede arrayet. Nå, og når vi læste strengen fra tastaturet, erstattede vi også metoden nextInt()med nextLine().


2. Stringarray i hukommelsen

Og endnu et nyttigt faktum. Lad os overveje 3 billeder:

Billede 1. Sådan Stringer et objekt arrangeret i hukommelsen:

String array i hukommelsen

Dette billede er taget fra tidligere lektioner.

Bemærk venligst, at teksten i strengen ikke er gemt direkte i variablen: en separat hukommelsesblok er allokeret til den. En Stringvariabel gemmer adressen (referencen) til et objekt, der gemmer teksten.

Billede 2. Hvordan et heltalsarray er arrangeret i hukommelsen:

String array i hukommelse 2

Dette billede er også kendt.

Billede 3. Sådan er et strengarray arrangeret i hukommelsen:

Hvordan en String-array er arrangeret i hukommelsen

Til venstre ser vi en array-variabel, hvis type er String[](den gemmer adressen på et array-objekt).

I midten har vi Stringselve array-objektet.

Og til højre er strengobjekter, der gemmer noget tekst.

Cellerne i Stringarrayet gemmer ikke selve strengene (teksten i String-objekterne). I stedet gemmer de deres adresser (referencer til dem). På samme måde som Stringvariabler gemmer adresserne på strengobjekter (hvor teksten er gemt).

Tag dette i betragtning, når du sammenligner matrixceller:

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]);
Opret et array med 10 strenge

Sæt værdier i arrayet



true (referencerne er ens)
false (referencerne er ikke ens)
true (strengene er ens)
true(strengene er stadig ens)


3. Hurtig array-initialisering i Java

Arrays er super nyttige, så Javas skabere forsøgte at gøre arbejdet med dem så bekvemt som muligt.

Den første ting, de gjorde, var at forenkle array-initialisering, den proces, hvorved du angiver startværdierne for et array.

Foruden data læst et sted fra, har et program jo også ret ofte brug for sine egne interne data for at fungere. Antag for eksempel, at vi skal gemme længden af ​​hver måned i et array. Sådan kan koden se ud:

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

Men takket være Javas skabere er der en måde at skrive dette mere kortfattet på:

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

Du kan blot liste alle værdierne af arrayet, adskilt af kommaer!

Praktisk, ikke? Men det er ikke alt.

Som det sker, kan compileren bestemme typen af ​​beholderen (array-objektet) baseret på typen af ​​værdierne for arrayet. Og for at bestemme længden af ​​arrayet er det trivielt at tælle antallet af elementer skrevet i de krøllede seler.

Det betyder, at denne kode kan skrives endnu kortere:

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

En ting af skønhed, ikke? 🙂

Dette kaldes "hurtig array-initialisering". Det virker forresten for andre typer end int...

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