Ano ang mga nababago/nababagong bagay, at para saan ang mga ito?  - 1

"Hi, Amigo!"

"Hi, Bilaabo!"

"Ngayon sasabihin sa iyo ni Bilaabo ang tungkol sa nababago at hindi nababagong mga bagay.

"Ang mga bagay na maaari mong baguhin pagkatapos gawin ang mga ito ay tinatawag na nababago ."

"Ang mga bagay na hindi mababago pagkatapos malikha ay tinatawag na hindi nababago ."

"Ano ang tumutukoy kung maaari kong baguhin ang isang bagay?"

"Ang may-akda ng isang bagong klase ay maaaring gumawa ng mga bagay ng klase na iyon na hindi nababago. Halimbawa, kung gagawin mong pribado ang lahat ng mga setter, ang isang bagay ay magkakaroon lamang ng isang constructor at getter; nangangahulugan ito na imposibleng baguhin pagkatapos na ito ay nilikha. ."

"At ano ang magiging punto niyan?"

"Ang mga hindi nababagong bagay ay may maraming kapaki-pakinabang na katangian, ngunit iha-highlight ko ang dalawa na karaniwan sa halos lahat ng hindi nababagong mga bagay:"

1) Ang mga nababagong bagay ay mas madaling ipatupad kaysa sa mga nababagong bagay.

2) Ang mga hindi nababagong bagay ay maaaring malayang magamit sa maraming mga thread nang sabay-sabay.

"Kapag nagpasya ang isang developer na magsulat ng isang hindi nababagong klase, karaniwan niyang ginagawa ang parehong nababago at hindi nababagong bersyon ng klase."

"Ngunit ano ang silbi ng pagsulat ng dalawang klase sa halip na isa?"

"Minsan sulit kapag ang isang hindi nababagong bersyon ng isang bagay ay magiging mas simple/mas mabilis kaysa sa isang nababago. Kaya, gumawa sila ng dalawang bersyon. Ito ay uri ng ArrayList at LinkedList: pareho ang mga listahan, ngunit ang isa ay na-optimize para sa mga partikular na layunin, at ang pangalawa para sa iba."

"Mas may saysay na 'yan."

"Mayroon ding mga purong hindi nababagong klase, na walang nababagong bersyon."

"Ngunit paano kung kailangan kong baguhin ang isang bagay sa isa sa mga bagay na iyon? Ano ang maaari mong gawin sa isang hindi nababagong bagay?"

"Karaniwan, ang mga hindi nababagong klase ay naglalaman ng iba't ibang mga pamamaraan na kumikilos na parang binabago nila ang bagay, ngunit ang mga pamamaraang ito ay lumilikha lamang ng isang bagong bagay at ibabalik ito, sa halip na baguhin ang mismong bagay."

"Narito ang ilang mga halimbawa:"

Java code Paglalarawan
String s = "london";
String s2 = s.toUpperCase();
Bilang resulta, ang s ay naglalaman ng string na «london» at ang s2 ay naglalaman ng «LONDON»
Integer i = 1;
Integer j = i;
j++;
Narito kung ano talaga ang mangyayari:
Integer i = new Integer(1);
Integer j = i;
j = bagong Integer(i.getInt()+1);

"Ang String class ay isang immutable class. Ang lahat ng String objects ay hindi nababago, ngunit hindi nito pinipigilan kaming magtrabaho sa kanila. Halimbawa, ang toUpperCase () method ng String class ay nagko-convert ng String sa uppercase (ibig sabihin, pinapalitan ang lahat ng maliliit na titik. may malalaking titik). Gayunpaman, hindi binabago ng paraang ito ang String mismo, sa halip ay nagbabalik ito ng bagong String. Ang bagong String na ito ay kapareho ng una maliban sa lahat ng mga character ay uppercase (capital letters)."

"Ang klase ng Integer ay isa ring hindi nababagong klase. Ang lahat ng mga bagay na Integer ay hindi nababago. Sa tuwing babaguhin natin ang isang bagay na Integer, talagang gumagawa tayo ng bagong bagay."

"Nakakatuwa! Hooray, Bilaabo."

"Hooray for me! Hooray for Bilaabo!"