Hei, Amigo! Jeg vil gjerne fortelle deg om den interne strukturen til variabler. Som du allerede vet, er hver variabel assosiert med et minneområde der verdien er lagret. "

"Ja. Du fortalte meg om det sist gang."

"Flott. Det er bra at du husker det. Da fortsetter jeg."

"Alle sammensatte typer består av enklere. Og de består på sin side av enda enklere. Helt til vi endelig ender opp med primitive typer , som ikke kan forenkles ytterligere. Det er det de kalles – primitive typer . For eksempel er int en primitiv type, men String er en sammensatt type som lagrer dataene sine som en tabell med tegn (der hvert tegn er en primitiv type char )."

"Veldig interessant. Fortsett."

"Kompositttyper dannes ved å gruppere enkle. Vi kaller slike typer klasser . Når vi definerer en ny klasse i et program, erklærer vi en ny sammensatt 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 sammensatt type er deklarert – Person.
Dataene lagres i Stringvariabelen (sammensatt type) nameog int(primitiv type).age
public class Rectangle
{
   int x, y, width, height;
}
En ny sammensatt type er deklarert – Rectangle.
Den består av fire int(primitiv type) variabler.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
En ny sammensatt type er deklarert – Cat. Den har følgende variabler:
owner, sammensatt type Person
territory, sammensatt type Rectangle
age, primitiv type int
name, sammensatt typeString

"Foreløpig er alt klart, uansett hvor rart det kan virke."

"Store (sammensatte) typer inneholder mange små (primitive) typer. Det er derfor objekter av disse typene tar opp mye minne - mer enn variabler av de primitive typene. Noen ganger mye mer. Å utføre tilordningsoperasjoner med slike variabler pleide å ta lang tid tid og krevde kopiering av store deler av minnet. Det er derfor variabler av sammensatte typer ikke lagrer selve objektet, men snarere bare en referanse til det, dvs. dets fire-byte adresse. Dette er nok til å adressere dataene i slike objekter. Java-maskinen håndterer alle tilhørende kompleksiteter."

— Jeg skjønte ingenting av det.

"Vi har tidligere sagt at en variabel er som en boks. Hvis du vil lagre tallet 13 i den, kan du skrive 13 på et stykke papir og legge det inn i boksen."

"Men forestill deg at du må oppbevare noe større i esken (variabel). For eksempel en hund, en bil eller naboen din. I stedet for å prøve å dytte det uskyvbare inn i esken, kan du gjøre noe enklere: bruke et bilde av hunden i stedet for den faktiske hunden, et skilt i stedet for en ekte bil, eller naboens telefonnummer i stedet for naboen."

"Vi tar et stykke papir og skriver ned naboens telefonnummer. Dette er som en henvisning til et objekt. Hvis vi kopierer papiret med naboens telefonnummer på og legger det i flere bokser, er det nå flere referanser. til naboen din. Men som før har du fortsatt bare én nabo. Det gir mening, ikke sant?"

"En viktig funksjon ved å lagre data på denne måten er at du kan ha mange referanser til et enkelt objekt "

"Så interessant! Jeg har nesten fått det. Fortell meg en gang til, vær så snill - hva ville skje hvis jeg tilordner en variabel av en sammensatt type til en annen variabel av samme sammensatte type?"

"Da vil de to variablene lagre den samme adressen. Det betyr at hvis du endrer dataene til objektet det refereres til av en variabel, endrer du dataene det refereres til av den andre . Begge variablene refererer til det samme objektet . Selvfølgelig kan det være mange andre variabler som også lagrer referanser til den."

"Hva gjør variabler av sammensatte (referanse/klasse) typer hvis de ikke har en referanse til et objekt? Er det i det hele tatt mulig?"

"Ja, Amigo. Du går foran meg med spørsmålet ditt. Det er mulig. Hvis en variabel av en referansetype (sammensatt) ikke lagrer en referanse til et objekt, lagrer den det som er kjent som en "null" referanse'. I bunn og grunn betyr dette at den refererer til et objekt hvis adresse er 0. Java-maskinen lager imidlertid aldri objekter med denne adressen, så den vet alltid at hvis en referansevariabel inneholder 0, så peker den ikke til noe objekt ."

Java-kode Beskrivelse
String s;
String s = null;
Tilsvarende utsagn.
Person person;
person = new Person();
person = null;
Vi lager en personvariabel hvis verdi er null.
Vi tildeler den adressen til et nyopprettet personobjekt.
Vi tildeler null til variabelen.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Vi lager et Cat-objekt og lagrer adressen i variabel cat; cat.owner er lik null.
Vi setter cat.owner lik adressen til et nyopprettet Person-objekt.
cat.owner.name er fortsatt lik null.
Vi setter cat.owner.name lik "Gud"

"Forstod jeg deg rett? Variabler er delt inn i to typer: primitive typer og referansetyper. Primitive typer lagrer verdier direkte, mens referansetyper lagrer en referanse til et objekt. Primitive typer inkluderer int, char, boolean og mange andre. Referanse typer inkluderer alt annet. Vi bruker klasser for å lage dem."

"Du har helt rett, gutten min."

"Så du sier at du har forstått alt. Her er noen oppgaver som hjelper deg å styrke kunnskapen din."