Vad är föränderliga/oföränderliga objekt, och vad är de till för?  - 1

"Hej, Amigo!"

"Hej, Bilaabo!"

"Idag kommer Bilaabo att berätta om föränderliga och oföränderliga objekt.

"Objekt du kan ändra efter att de har skapats kallas föränderliga ."

"Objekt som inte kan ändras efter att de har skapats kallas oföränderliga ."

"Vad avgör om jag kan ändra ett objekt?"

"Författaren till en ny klass kan göra objekt av den klassen oföränderliga. Till exempel, om du gör alla sättare privata, kommer ett objekt bara att ha en konstruktor och getters; det betyder att det kommer att vara omöjligt att ändra efter att det har skapats ."

"Och vad skulle vara poängen med det?"

"Oföränderliga objekt har många användbara egenskaper, men jag ska lyfta fram två som är gemensamma för nästan alla oföränderliga objekt:"

1) Oföränderliga objekt är mycket lättare att implementera än föränderliga objekt.

2) Oföränderliga objekt kan fritt användas över flera trådar samtidigt.

"När en utvecklare bestämmer sig för att skriva en oföränderlig klass, gör han vanligtvis både en föränderlig och oföränderlig version av klassen."

"Men vad är poängen med att skriva två klasser istället för en?"

"Ibland är det värt det när en oföränderlig version av ett objekt kommer att vara mycket enklare/snabbare än en föränderlig. Så de gör två versioner. Det är ungefär som ArrayList och LinkedList: båda är listor, men den ena är optimerad för specifika ändamål, och den andra för andra."

"Det är redan mer vettigt."

"Det finns också rent oföränderliga klasser, som inte har en föränderlig version."

"Men tänk om jag behöver ändra något i ett av dessa objekt? Vad kan man egentligen göra med ett oföränderligt objekt?"

"Vanligtvis innehåller oföränderliga klasser olika metoder som fungerar som om de ändrar objektet, men dessa metoder skapar helt enkelt ett nytt objekt och returnerar det, istället för att ändra själva objektet."

"Här är några exempel:"

Java-kod Beskrivning
String s = "london";
String s2 = s.toUpperCase();
Som ett resultat innehåller s strängen «london» och s2 innehåller «LONDON»
Integer i = 1;
Integer j = i;
j++;
Här är vad som verkligen händer:
Integer i = new Integer(1);
Heltal j = i;
j = nytt heltal(i.getInt()+1);

"Klassen String är en oföränderlig klass. Alla String-objekt är oföränderliga, men det hindrar oss inte från att arbeta med dem. Till exempel konverterar metoden toUpperCase () för klassen String en String till versaler ( dvs. ersätter alla små bokstäver) med stora bokstäver). Den här metoden ändrar dock inte själva strängen, istället returnerar den en ny sträng. Denna nya sträng är identisk med den första förutom att alla tecken är versaler (versaler)."

"Klassen Integer är också en oföränderlig klass. Alla Integer-objekt är oföränderliga. Varje gång vi ändrar ett Integer-objekt skapar vi faktiskt ett nytt objekt."

"Vad intressant! Hurra, Bilaabo."

"Hurra för mig! Hurra för Bilaabo!"