Wat zijn veranderlijke/onveranderlijke objecten en waar dienen ze voor?  - 1

"Hallo Amigo!"

"Hallo Bilaabo!"

"Vandaag zal Bilaabo je vertellen over veranderlijke en onveranderlijke objecten.

"Objecten die u kunt wijzigen nadat ze zijn gemaakt, worden veranderlijk genoemd ."

"Objecten die niet kunnen worden gewijzigd nadat ze zijn gemaakt, worden onveranderlijk genoemd ."

"Wat bepaalt of ik een object kan wijzigen?"

"De auteur van een nieuwe klasse kan objecten van die klasse onveranderlijk maken. Als u bijvoorbeeld alle setters privé maakt, heeft een object alleen een constructor en getters; dat betekent dat het onmogelijk is om het te wijzigen nadat het is gemaakt ."

"En wat zou daar het nut van zijn?"

"Onveranderlijke objecten hebben veel nuttige eigenschappen, maar ik zal er twee benadrukken die voor bijna alle onveranderlijke objecten gelden:"

1) Onveranderlijke objecten zijn veel gemakkelijker te implementeren dan veranderlijke objecten.

2) Onveranderlijke objecten kunnen vrijelijk tegelijkertijd over meerdere threads worden gebruikt.

"Wanneer een ontwikkelaar besluit een onveranderlijke klasse te schrijven, maakt hij meestal zowel een veranderlijke als een onveranderlijke versie van de klasse."

"Maar wat heeft het voor zin om twee klassen te schrijven in plaats van één?"

"Soms is het de moeite waard wanneer een onveranderlijke versie van een object veel eenvoudiger/sneller is dan een veranderlijke. Dus maken ze twee versies. Het is een beetje zoals ArrayList en LinkedList: beide zijn lijsten, maar één is geoptimaliseerd voor specifieke doeleinden, en de tweede voor anderen."

"Dat is al logischer."

"Er zijn ook puur onveranderlijke klassen, die geen veranderlijke versie hebben."

"Maar wat als ik iets aan een van die objecten moet veranderen? Wat kun je eigenlijk doen met een onveranderlijk object?"

"Gewoonlijk bevatten onveranderlijke klassen verschillende methoden die doen alsof ze het object wijzigen, maar deze methoden maken gewoon een nieuw object en retourneren het, in plaats van het object zelf te veranderen."

"Hier zijn enkele voorbeelden:"

Java-code Beschrijving
String s = "london";
String s2 = s.toUpperCase();
Als resultaat bevat s de string «london» en s2 bevat «LONDON»
Integer i = 1;
Integer j = i;
j++;
Dit is wat er echt gebeurt:
Integer i = nieuw Integer(1);
geheel getal j = i;
j = nieuw geheel getal(i.getInt()+1);

"De String-klasse is een onveranderlijke klasse. Alle String-objecten zijn onveranderlijk, maar dat weerhoudt ons er niet van om ermee te werken. De methode toUpperCase () van de String- klasse converteert bijvoorbeeld een String naar hoofdletters (dwz vervangt alle kleine letters met hoofdletters). Deze methode verandert de string zelf echter niet, maar retourneert een nieuwe string. Deze nieuwe string is identiek aan de eerste, behalve dat alle tekens hoofdletters zijn (hoofdletters)."

"De Integer-klasse is ook een onveranderlijke klasse. Alle Integer-objecten zijn onveranderlijk. Elke keer dat we een Integer-object wijzigen, maken we eigenlijk een nieuw object."

"Wat interessant! Hoera, Bilaabo."

"Hoera voor mij! Hoera voor Bilaabo!"