Mik azok a változtatható/megváltoztathatatlan objektumok, és mire valók?  - 1

– Szia Amigo!

– Szia, Bilaabo!

"Ma Bilaabo a változtatható és megváltoztathatatlan tárgyakról fog beszélni .

"Azokat az objektumokat, amelyeket a létrehozásuk után megváltoztathat, változónak nevezzük ."

"Azokat az objektumokat, amelyeket létrehozásuk után nem lehet megváltoztatni, megváltoztathatatlannak nevezzük ."

"Mi határozza meg, hogy megváltoztathatok-e egy tárgyat?"

"Egy új osztály szerzője megváltoztathatatlanná teheti az adott osztály objektumait. Ha például az összes settert priváttá teszed, akkor egy objektumnak csak konstruktora és getterei lesznek; ez azt jelenti, hogy a létrehozás után lehetetlen lesz megváltoztatni. ."

– És mi értelme lenne ennek?

"A megváltoztathatatlan objektumok számos hasznos tulajdonsággal rendelkeznek, de kiemelek kettőt, amelyek szinte minden megváltoztathatatlan objektumra jellemzőek:

1) A megváltoztathatatlan objektumok sokkal könnyebben megvalósíthatók, mint a változtatható objektumok.

2) A megváltoztathatatlan objektumok szabadon használhatók egyidejűleg több szálon keresztül.

"Amikor egy fejlesztő úgy dönt, hogy megváltoztathatatlan osztályt ír, általában elkészíti az osztály megváltoztatható és megváltoztathatatlan változatát is."

– De mi értelme két osztályt írni egy helyett?

"Néha megéri, ha egy objektum megváltoztathatatlan verziója sokkal egyszerűbb/gyorsabb, mint egy változtatható. Tehát két verziót készítenek. Ez olyan, mint az ArrayList és a LinkedList: mindkettő lista, de az egyik meghatározott célokra van optimalizálva, a második pedig másoké."

– Ennek már több értelme van.

"Vannak tisztán megváltoztathatatlan osztályok is, amelyeknek nincs megváltoztatható verziója."

"De mi van akkor, ha valamit meg kell változtatnom az egyik objektumon? Mit lehet valójában csinálni egy megváltoztathatatlan tárggyal?"

"Általában a megváltoztathatatlan osztályok különféle metódusokat tartalmaznak, amelyek úgy működnek, mintha megváltoztatnák az objektumot, de ezek a metódusok egyszerűen létrehoznak egy új objektumot, és visszaadják azt, ahelyett, hogy magát az objektumot megváltoztatnák."

"Íme néhány példa:"

Java kód Leírás
String s = "london";
String s2 = s.toUpperCase();
Ennek eredményeként az s a "london" karakterláncot tartalmazza, az s2 pedig a "LONDON" karakterláncot
Integer i = 1;
Integer j = i;
j++;
Íme, mi történik valójában:
Integer i = new Integer(1);
Egész j = i;
j = new Integer(i.getInt()+1);

"A String osztály egy megváltoztathatatlan osztály. Minden String objektum megváltoztathatatlan, de ez nem tart vissza attól, hogy dolgozzunk velük. Például a String osztály toUpperCase () metódusa egy Stringet nagybetűssé alakít (azaz minden kis betűt lecserél nagybetűkkel). Ez a módszer azonban magát a karakterláncot nem változtatja meg, hanem egy új karakterláncot ad vissza. Ez az új karakterlánc megegyezik az elsővel, kivéve, hogy minden karakter nagybetű (nagybetű)."

"Az Integer osztály is egy megváltoztathatatlan osztály. Minden Integer objektum megváltoztathatatlan. Minden alkalommal, amikor megváltoztatunk egy Integer objektumot, valójában egy új objektumot hozunk létre."

– Milyen érdekes! Hurrá, Bilaabo.

"Hurrá nekem! Hurrá Bilaabónak!"