Hva er foranderlige/uforanderlige objekter, og hva er de for?  - 1

"Hei, Amigo!"

"Hei, Bilaabo!"

"I dag vil Bilaabo fortelle deg om foranderlige og uforanderlige objekter.

"Objekter du kan endre etter at de er opprettet kalles mutable ."

"Objekter som ikke kan endres etter at de er opprettet kalles uforanderlige ."

"Hva avgjør om jeg kan endre et objekt?"

"Forfatteren av en ny klasse kan gjøre objekter av den klassen uforanderlige. For eksempel, hvis du gjør alle setterne private, vil et objekt bare ha en konstruktør og gettere; det betyr at det vil være umulig å endre etter at det er opprettet ."

"Og hva ville være vitsen med det?"

"Uforanderlige objekter har mange nyttige egenskaper, men jeg vil fremheve to som er felles for nesten alle uforanderlige objekter:"

1) Uforanderlige objekter er mye enklere å implementere enn foranderlige objekter.

2) Uforanderlige objekter kan fritt brukes på tvers av flere tråder samtidig.

"Når en utvikler bestemmer seg for å skrive en uforanderlig klasse, lager han vanligvis både en foranderlig og uforanderlig versjon av klassen."

"Men hva er vitsen med å skrive to klasser i stedet for en?"

"Noen ganger er det verdt det når en uforanderlig versjon av et objekt vil være langt enklere/raskere enn en foranderlig. Så de lager to versjoner. Det er litt som ArrayList og LinkedList: begge er lister, men den ene er optimalisert for spesifikke formål, og den andre for andre."

"Det gir mer mening allerede."

"Det er også rent uforanderlige klasser, som ikke har en foranderlig versjon."

"Men hva om jeg trenger å endre noe i et av disse objektene? Hva kan du egentlig gjøre med et uforanderlig objekt?"

"Vanligvis inneholder uforanderlige klasser forskjellige metoder som fungerer som om de endrer objektet, men disse metodene oppretter ganske enkelt et nytt objekt og returnerer det, i stedet for å endre selve objektet."

"Her er noen eksempler:"

Java-kode Beskrivelse
String s = "london";
String s2 = s.toUpperCase();
Som et resultat inneholder s strengen «london» og s2 inneholder «LONDON»
Integer i = 1;
Integer j = i;
j++;
Her er hva som virkelig skjer:
Heltall i = nytt heltall(1);
Heltall j = i;
j = nytt heltall(i.getInt()+1);

"String-klassen er en uforanderlig klasse. Alle String-objekter er uforanderlige, men det hindrer oss ikke i å jobbe med dem. For eksempel konverterer toUpperCase ()-metoden til String-klassen en String til store bokstaver (dvs. erstatter alle små bokstaver) med store bokstaver). Denne metoden endrer imidlertid ikke selve strengen, i stedet returnerer den en ny streng. Denne nye strengen er identisk med den første bortsett fra at alle tegnene er store (store bokstaver)."

"Klassen Integer er også en uforanderlig klasse. Alle Integer-objekter er uforanderlige. Hver gang vi endrer et Integer-objekt, lager vi faktisk et nytt objekt."

"Så interessant! Hurra, Bilaabo."

"Hurra for meg! Hurra for Bilaabo!"