Ce sunt obiectele mutabile/imuabile și pentru ce sunt acestea?  - 1

"Bună, Amigo!"

— Bună, Bilaabo!

„Astăzi, Bilaabo vă va spune despre obiectele mutabile și imuabile .

„Obiectele pe care le puteți schimba după ce sunt create sunt numite mutabile .”

„Obiectele care nu pot fi modificate după ce sunt create sunt numite imuabile .”

„Ce determină dacă pot schimba un obiect?”

„Autorul unei clase noi poate face obiectele din acea clasă imuabile. De exemplu, dacă faceți private toți seterii, atunci un obiect va avea doar un constructor și getters; asta înseamnă că va fi imposibil de schimbat după ce este creat. ."

— Și care ar fi rostul asta?

„Obiectele imuabile au multe proprietăți utile, dar voi evidenția două care sunt comune pentru aproape toate obiectele imuabile:”

1) Obiectele imuabile sunt mult mai ușor de implementat decât obiectele mutabile.

2) Obiectele imuabile pot fi utilizate liber în mai multe fire simultan.

„Când un dezvoltator decide să scrie o clasă imuabilă, de obicei face atât o versiune mutabilă, cât și o versiune imuabilă a clasei.”

— Dar ce rost are să scrii două clase în loc de una?

„Uneori, merită când o versiune imuabilă a unui obiect va fi mult mai simplă/mai rapidă decât una mutabilă. Deci, ei fac două versiuni. Este un fel ca ArrayList și LinkedList: ambele sunt liste, dar una este optimizată pentru scopuri specifice, iar al doilea pentru alții”.

„Asta are deja mai mult sens”.

„Există și clase pur imuabile, care nu au o versiune mutabilă”.

"Dar ce se întâmplă dacă trebuie să schimb ceva într-unul dintre acele obiecte? Ce poți face de fapt cu un obiect imuabil?"

„De obicei, clasele imuabile conțin diverse metode care acționează ca și cum ar schimba obiectul, dar aceste metode pur și simplu creează un nou obiect și îl returnează, în loc să schimbe obiectul în sine.”

"Aici sunt cateva exemple:"

Cod Java Descriere
String s = "london";
String s2 = s.toUpperCase();
Ca rezultat, s conține șirul «londra» și s2 conține «LONDRA»
Integer i = 1;
Integer j = i;
j++;
Iată ce se întâmplă cu adevărat:
Integer i = new Integer(1);
Întreg j = i;
j = new Integer(i.getInt()+1);

„Clasa String este o clasă imuabilă. Toate obiectele String sunt imuabile, dar asta nu ne împiedică să lucrăm cu ele. De exemplu, metoda toUpperCase () a clasei String convertește un String în majuscule (adică înlocuiește toate literele mici cu litere mari). Cu toate acestea, această metodă nu schimbă șirul în sine, ci returnează un șir nou. Acest șir nou este identic cu primul, cu excepția faptului că toate caracterele sunt majuscule (litere mari)."

"Clasa Integer este, de asemenea, o clasă imuabilă. Toate obiectele Integer sunt imuabile. De fiecare dată când schimbăm un obiect Integer, de fapt creăm un nou obiect."

"Ce interesant! Ura, Bilaabo."

"Ura pentru mine! Ura pentru Bilaabo!"