Hallo Amigo! Ik wil je iets vertellen over de interne structuur van variabelen. Zoals u al weet, is elke variabele gekoppeld aan een geheugengebied waar de waarde ervan wordt opgeslagen. "

'Ja. Daar heb je me de vorige keer over verteld.'

'Geweldig. Het is goed dat je het je herinnert. Dan ga ik verder.'

"Alle samengestelde typen bestaan ​​uit eenvoudigere. En die bestaan ​​op hun beurt uit nog eenvoudigere. Totdat we uiteindelijk uitkomen bij primitieve typen , die niet verder vereenvoudigd kunnen worden. Zo heten ze - primitieve typen . Want int is bijvoorbeeld een primitief type, maar String is een samengesteld type dat zijn gegevens opslaat als een tabel met tekens (waarbij elk teken een primitief type char is )."

"Heel interessant. Ga verder."

"Samengestelde typen worden gevormd door eenvoudige typen te groeperen. We noemen dergelijke typen klassen . Wanneer we een nieuwe klasse in een programma definiëren, declareren we een nieuw samengesteld gegevenstype . De gegevens zullen andere samengestelde typen of primitieve typen zijn."

Java-code Beschrijving
public class Person
{
   String name;
   int age;
}
Er wordt een nieuw samengesteld type gedeclareerd – Person.
De gegevens worden opgeslagen in de String(samengestelde type) variabele nameen int(primitieve type) variabeleage
public class Rectangle
{
   int x, y, width, height;
}
Er wordt een nieuw samengesteld type gedeclareerd – Rectangle.
Het bestaat uit vier int(primitieve type) variabelen.
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Er wordt een nieuw samengesteld type gedeclareerd – Cat. Het heeft de volgende variabelen:
owner, samengesteld type Person
territory, samengesteld type Rectangle
age, primitief type int
name, samengesteld typeString

"Voor nu is alles duidelijk, hoe raar het ook mag lijken."

"Grote (samengestelde) typen bevatten veel kleine (primitieve) typen. Daarom nemen objecten van deze typen veel geheugen in beslag - meer dan variabelen van de primitieve typen. Soms veel meer. Het uitvoeren van toewijzingsbewerkingen met dergelijke variabelen duurde vroeger lang tijd en vereiste het kopiëren van grote delen van het geheugen.Daarom slaan variabelen van samengestelde typen het object zelf niet op, maar alleen een verwijzing ernaar, dwz het adres van vier bytes.Dit is voldoende om de gegevens in dergelijke objecten te adresseren. De Java-machine kan alle bijbehorende complexiteiten aan."

"Ik begreep er niets van."

"We hebben eerder gezegd dat een variabele als een doos is. Als je het getal 13 erin wilt opslaan, kun je 13 op een vel papier schrijven en in de doos stoppen."

"Maar stel je voor dat je iets groters in de doos moet opbergen (variabel). Bijvoorbeeld een hond, een auto of je buurman. In plaats van te proberen de niet-duwbare in de doos te duwen, zou je iets gemakkelijker kunnen doen: een foto gebruiken van de hond in plaats van de echte hond, een kentekenplaat in plaats van een echte auto, of het telefoonnummer van je buurman in plaats van je buurman."

"We nemen een stuk papier en schrijven het telefoonnummer van de buurman op. Dit is als een verwijzing naar een object. Als we het stuk papier met het telefoonnummer van de buurman erop kopiëren en in meerdere dozen stoppen, zijn er nu meer referenties." aan je buurman. Maar je hebt net als vroeger nog steeds maar één buurman. Dat is logisch, nietwaar?'

"Een belangrijk kenmerk van het op deze manier opslaan van gegevens is dat je veel verwijzingen naar een enkel object kunt hebben "

"Wat interessant! Ik heb het bijna. Vertel me alsjeblieft nog een keer - wat zou er gebeuren als ik een variabele van een samengesteld type toewijs aan een andere variabele van hetzelfde samengestelde type?"

"Dan zouden de twee variabelen hetzelfde adres opslaan. Dat betekent dat als je de gegevens wijzigt van het object waarnaar wordt verwezen door de ene variabele, je de gegevens wijzigt waarnaar wordt verwezen door de andere . Beide variabelen verwijzen naar hetzelfde object . Natuurlijk kunnen er veel zijn andere variabelen die er ook verwijzingen naar opslaan."

"Wat doen variabelen van samengestelde (referentie/klasse) typen als ze geen verwijzing naar een object bevatten? Is dat zelfs mogelijk?"

"Ja, Amigo. Je loopt voor op me met je vraag. Dat is mogelijk. Als een variabele van een referentie (samengesteld) type geen referentie naar een object opslaat, dan slaat het een zogenaamde 'null' op. referentie'. In feite betekent dit dat het verwijst naar een object waarvan het adres 0 is. De Java-machine maakt echter nooit objecten met dit adres, dus het weet altijd dat als een referentievariabele 0 bevat, deze niet naar een object verwijst ."

Java-code Beschrijving
String s;
String s = null;
Gelijkwaardige verklaringen.
Person person;
person = new Person();
person = null;
We maken een persoonsvariabele aan waarvan de waarde null is.
We wijzen er het adres van een nieuw gemaakt persoonsobject aan toe.
We wijzen null toe aan de variabele.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
We maken een Cat-object en slaan het adres op in de variabele cat; cat.owner is gelijk aan null.
We stellen cat.owner gelijk aan het adres van een nieuw aangemaakt Person-object.
cat.owner.name is nog steeds gelijk aan null.
We stellen kat.eigenaar.naam gelijk aan "God"

"Heb ik je goed begrepen? Variabelen zijn onderverdeeld in twee typen: primitieve typen en referentietypen. Primitieve typen slaan waarden rechtstreeks op, terwijl referentietypen een verwijzing naar een object opslaan. Primitieve typen omvatten int, char, boolean en vele andere. Referentie typen omvatten al het andere. We gebruiken klassen om ze te maken."

"Je hebt helemaal gelijk, mijn jongen."

"Dus je zegt dat je alles hebt begrepen. Hier zijn enkele taken om je te helpen je kennis te versterken."