Hvad er foranderlige/uforanderlige objekter, og hvad er de til?  - 1

"Hej, Amigo!"

"Hej, Bilaabo!"

"I dag vil Bilaabo fortælle dig om foranderlige og uforanderlige objekter.

"Objekter, du kan ændre, efter de er oprettet, kaldes mutable ."

"Objekter, der ikke kan ændres, efter de er oprettet, kaldes uforanderlige ."

"Hvad bestemmer, om jeg kan ændre et objekt?"

"Forfatteren af ​​en ny klasse kan gøre objekter af den klasse uforanderlige. For eksempel, hvis du gør alle sættere private, så vil et objekt kun have en konstruktør og gettere; det betyder, at det vil være umuligt at ændre efter det er oprettet ."

"Og hvad ville være meningen med det?"

"Uforanderlige objekter har mange nyttige egenskaber, men jeg vil fremhæve to, der er fælles for næsten alle uforanderlige objekter:"

1) Uforanderlige objekter er meget nemmere at implementere end foranderlige objekter.

2) Uforanderlige objekter kan frit bruges på tværs af flere tråde samtidigt.

"Når en udvikler beslutter sig for at skrive en uforanderlig klasse, laver han normalt både en foranderlig og uforanderlig version af klassen."

"Men hvad er meningen med at skrive to klasser i stedet for en?"

"Nogle gange er det det værd, når en uforanderlig version af et objekt vil være langt enklere/hurtigere end en foranderlig. Så de laver to versioner. Det er lidt ligesom ArrayList og LinkedList: begge er lister, men den ene er optimeret til specifikke formål, og den anden for andre."

"Det giver allerede mere mening."

"Der er også rent uforanderlige klasser, som ikke har en foranderlig version."

"Men hvad hvis jeg har brug for at ændre noget i et af disse objekter? Hvad kan man egentlig gøre med et uforanderligt objekt?"

"Normalt indeholder uforanderlige klasser forskellige metoder, der virker som om de ændrer objektet, men disse metoder skaber simpelthen et nyt objekt og returnerer det, i stedet for at ændre selve objektet."

"Her er nogle eksempler:"

Java kode Beskrivelse
String s = "london";
String s2 = s.toUpperCase();
Som et resultat indeholder s strengen «london» og s2 indeholder «LONDON»
Integer i = 1;
Integer j = i;
j++;
Her er, hvad der virkelig sker:
Integer i = new Integer(1);
Heltal j = i;
j = nyt heltal(i.getInt()+1);

"String-klassen er en uforanderlig klasse. Alle String-objekter er uforanderlige, men det forhindrer os ikke i at arbejde med dem. For eksempel konverterer toUpperCase ()-metoden i String -klassen en String til store bogstaver (dvs. erstatter alle små bogstaver) med store bogstaver). Denne metode ændrer dog ikke selve strengen, i stedet returnerer den en ny streng. Denne nye streng er identisk med den første, bortset fra at alle tegn er store bogstaver (store bogstaver)."

"Klassen Integer er også en uforanderlig klasse. Alle Integer-objekter er uforanderlige. Hver gang vi ændrer et Integer-objekt, skaber vi faktisk et nyt objekt."

"Hvor interessant! Hurra, Bilaabo."

"Hurra for mig! Hurra for Bilaabo!"