1. Stringarray

Jag skulle vilja ge dig en kort översikt om Stringarrayer.

Som vi sa tidigare kan en array vara av vilken typ som helst. Det betyder att du kan skapa en array av Strings. Om vi ​​ville skriva ett program som "läser 10 rader från tangentbordet och visar dem i omvänd ordning", så här skulle koden se ut:

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]);
}
Skapa ett Scannerobjekt
Skapa ett arrayobjekt med 10 element
Loop från 0 till 9

Läs en sträng från tangentbordet och spara den i nästa cell i matrisen
Loop från 9 till 0

Visa nästa cell i matrisen

Koden ändrades knappt! Vi behövde bara ersätta intmed Stringnär vi skapade arrayen. Tja, och när vi läste strängen från tangentbordet bytte vi också ut nextInt()metoden med nextLine().


2. Stringarray i minnet

Och ytterligare ett användbart faktum. Låt oss överväga 3 bilder:

Bild 1. Hur ett Stringobjekt är ordnat i minnet:

Strängarray i minnet

Den här bilden är tagen från tidigare lektioner.

Observera att texten i strängen inte lagras direkt i variabeln: ett separat minnesblock tilldelas den. En Stringvariabel lagrar adressen (referensen) till ett objekt som lagrar texten.

Bild 2. Hur en heltalsmatris är ordnad i minnet:

Strängarray i minne 2

Den här bilden är också bekant.

Bild 3. Hur en strängarray är ordnad i minnet:

Hur en strängarray är ordnad i minnet

Till vänster ser vi en arrayvariabel vars typ är String[](den lagrar adressen till ett arrayobjekt).

I mitten har vi Stringsjälva arrayobjektet.

Och till höger finns strängobjekt som lagrar lite text.

Cellerna i Stringarrayen lagrar inte själva strängarna (texten i String-objekten). Istället lagrar de sina adresser (referenser till dem). På samma sätt som Stringvariabler lagrar adresserna till strängobjekt (där texten lagras).

Ta hänsyn till detta när du jämför arrayceller:

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]);
Skapa en array med 10 strängar

Lägg värden i arrayen



true (referenserna är lika)
false (referenserna är inte lika) (
true strängarna är lika)
true(strängarna är fortfarande lika)


3. Snabb arrayinitiering i Java

Arrayer är superanvändbara, så Javas skapare försökte göra arbetet med dem så bekvämt som möjligt.

Det första de gjorde var att förenkla arrayinitiering, processen genom vilken du anger de initiala värdena för en array.

När allt kommer omkring, förutom data som läses från någonstans, behöver ett program också ganska ofta sina egna interna data för att fungera. Anta till exempel att vi behöver lagra längderna för varje månad i en array. Så här kan koden se ut:

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 tack vare Javas skapare finns det ett sätt att skriva detta mer kortfattat:

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

Du kan helt enkelt lista alla värden i arrayen, separerade med kommatecken!

Bekvämt, eller hur? Men det är inte allt.

När det händer kan kompilatorn bestämma typen av behållaren (arrayobjekt) baserat på typen av värden för arrayen. Och för att bestämma längden på arrayen är det trivialt att räkna antalet element skrivna i de lockiga hängslen.

Det betyder att den här koden kan skrivas ännu kortare:

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

En sak av skönhet, eller hur? 🙂

Detta kallas "snabb arrayinitiering". Förresten, det här fungerar för andra typer än int...

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