Hej, Amigo! Jeg vil gerne fortælle dig om den interne struktur af variabler. Som du allerede ved, er hver variabel forbundet med et hukommelsesområde, hvor dens værdi er gemt. "

"Ja. Det fortalte du mig om sidste gang."

"Fint. Det er godt, du husker det. Så fortsætter jeg."

"Alle sammensatte typer består af simplere. Og de består til gengæld af endnu simplere. Indtil vi endelig ender med primitive typer , som ikke kan forenkles yderligere. Det er det, de kaldes – primitive typer . For eksempel er int en primitiv type, men String er en sammensat type, der gemmer sine data som en tabel med tegn (hvor hvert tegn er en primitiv type char )."

"Meget interessant. Fortsæt."

"Komposittyper dannes ved at gruppere simple. Sådanne typer kalder vi klasser . Når vi definerer en ny klasse i et program, erklærer vi en ny sammensat datatype . Dens data vil enten være andre sammensatte typer eller primitive typer."

Java kode Beskrivelse
public class Person
{
   String name;
   int age;
}
En ny sammensat type er deklareret – Person.
Dens data er lagret i Stringvariablen (sammensat type) nameog int(primitiv type).age
public class Rectangle
{
   int x, y, width, height;
}
En ny sammensat type er deklareret – Rectangle.
Den består af fire int(primitiv type) variable.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
En ny sammensat type er deklareret – Cat. Den har følgende variabler:
owner, sammensat type Person
territory, sammensat type Rectangle
age, primitiv type int
name, sammensat typeString

"For nu er alt klart, hvor mærkeligt det end kan virke."

"Store (sammensatte) typer indeholder mange små (primitive) typer. Det er derfor, objekter af disse typer fylder meget - mere end variabler af de primitive typer. Nogle gange meget mere. Udførelse af tildelingsoperationer med sådanne variable plejede at tage lang tid tid og krævede kopiering af store dele af hukommelsen. Det er derfor, variabler af sammensatte typer ikke gemmer selve objektet, men snarere blot en reference til det, dvs. dets fire-byte adresse. Dette er nok til at adressere dataene i sådanne objekter. Java-maskinen håndterer alle de tilknyttede kompleksiteter."

"Det forstod jeg ikke noget af."

"Vi har tidligere sagt, at en variabel er som en æske. Hvis du vil gemme tallet 13 i den, kan du skrive 13 på et stykke papir og lægge den i æsken."

"Men forestil dig, at du skal opbevare noget større i kassen (variabelt). For eksempel en hund, en bil eller din nabo. I stedet for at forsøge at skubbe det uskubbelige ind i kassen, kunne du gøre noget lettere: Brug et foto af hunden i stedet for den egentlige hund, en nummerplade i stedet for en rigtig bil, eller din nabos telefonnummer i stedet for din nabo."

"Vi tager et stykke papir og skriver naboens telefonnummer ned. Det er ligesom en henvisning til en genstand. Hvis vi kopierer papiret med naboens telefonnummer på og lægger det i flere kasser, er der nu flere referencer. til din nabo. Men som før har du stadig kun én nabo. Det giver mening, ikke?

"En vigtig egenskab ved at gemme data på denne måde er, at du kan have mange referencer til et enkelt objekt "

"Hvor interessant! Jeg har næsten forstået det. Fortæl mig venligst en gang mere – hvad ville der ske, hvis jeg tildeler en variabel af en sammensat type til en anden variabel af samme sammensatte type?"

"Så ville de to variable gemme den samme adresse. Det betyder, at hvis du ændrer dataene for det objekt, der refereres til af den ene variabel, ændrer du dataene, der refereres til af den anden . Begge variabler refererer til det samme objekt . Selvfølgelig kan der være mange andre variabler, der også gemmer referencer til det."

"Hvad gør variabler af sammensatte (reference/klasse) typer, hvis de ikke har en reference til et objekt? Er det overhovedet muligt?"

"Ja, Amigo. Du går foran mig med dit spørgsmål. Det er muligt. Hvis en variabel af en referencetype (sammensat) ikke gemmer en reference til et objekt, så gemmer den det, der er kendt som et "nul" reference'. Grundlæggende betyder det, at det refererer til et objekt, hvis adresse er 0. Java-maskinen opretter dog aldrig objekter med denne adresse, så den ved altid, at hvis en referencevariabel indeholder 0, så peger den ikke på noget objekt. ."

Java kode Beskrivelse
String s;
String s = null;
Tilsvarende udsagn.
Person person;
person = new Person();
person = null;
Vi opretter en personvariabel, hvis værdi er nul.
Vi tildeler den adressen på et nyoprettet personobjekt.
Vi tildeler null til variablen.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Vi opretter et Cat-objekt og gemmer dets adresse i variabel kat; kat.ejer er lig med null.
Vi sætter cat.owner lig med adressen på et nyoprettet Person-objekt.
cat.owner.name er stadig lig med null.
Vi sætter cat.owner.name lig med "Gud"

"Forstod jeg dig rigtigt? Variabler er opdelt i to typer: primitive typer og referencetyper. Primitive typer gemmer værdier direkte, mens referencetyper gemmer en reference til et objekt. Primitive typer omfatter int, char, boolean og mange andre. Reference typer omfatter alt andet. Vi bruger klasser til at oprette dem."

"Du har fuldstændig ret, min dreng."

"Så du siger, at du har forstået alt. Her er nogle opgaver, der hjælper dig med at styrke din viden."