Какво представляват променливи/неизменни обекти и за Howво служат?  - 1

„Здрасти, Амиго!“

„Здравей, Билаабо!“

„Днес Билаабо ще ви разкаже за променливи и неизменни обекти.

"Обектите, които можете да промените, след като са създадени, се наричат ​​mutable ."

"Обекти, които не могат да бъдат променени след като са създадени, се наричат ​​неизменни ."

„Какво определя дали мога да променя обект?“

„Authorът на нов клас може да направи обектите от този клас неизменни. Например, ако направите всички сетери частни, тогава обектът ще има само конструктор и гетери; това означава, че ще бъде невъзможно да се промени, след като бъде създаден ."

— И Howъв би бил смисълът от това?

„Неизменните обекти имат много полезни свойства, но ще подчертая две, които са общи за почти всички неизменни обекти:“

1) Неизменните обекти са много по-лесни за имплементиране от променливите обекти.

2) Неизменните обекти могат да се използват свободно в множество нишки едновременно.

„Когато разработчик реши да напише неизменен клас, той обикновено прави Howто променлива, така и неизменна version на класа.“

„Но Howъв е смисълът да пишем два класа instead of един?“

„Понякога си струва, когато неизменна version на обект ще бъде много по-проста/по-бърза от променлива. Така че те правят две версии. Това е нещо като ArrayList и LinkedList: и двата са списъци, но единият е оптимизиран за конкретни цели, а второто за другите."

— Това вече има повече смисъл.

„Има и чисто неизменни класове, които нямат променлива version.“

„Но Howво ще стане, ако трябва да променя нещо в един от тези обекти? Какво всъщност можете да направите с неизменен обект?“

„Обикновено неизменните класове съдържат различни методи, които действат така, сякаш променят обекта, но тези методи просто създават нов обект и го връщат, instead of да променят самия обект.“

"Ето няколко примера:"

Java code Описание
String s = "london";
String s2 = s.toUpperCase();
В резултат s съдържа низа «london» и s2 съдържа «LONDON»
Integer i = 1;
Integer j = i;
j++;
Ето Howво наистина се случва:
Integer i = new Integer(1);
Цяло число j = i;
j = ново цяло число(i.getInt()+1);

„Класът String е неизменен клас. Всички String обекти са неизменни, но това не ни пречи да работим с тях. Например методът toUpperCase () на класа String преобразува String в главни букви (т.е. замества всички малки букви с главни букви). Този метод обаче не променя самия низ, instead of това връща нов низ. Този нов низ е идентичен с първия, с изключение на това, че всички символи са главни (главни букви)."

"Класът Integer също е неизменен клас. Всички обекти Integer са неизменни. Всеки път, когато променим обект Integer, ние всъщност създаваме нов обект."

"Колко интересно! Ура, Билаабо."

„Ура за мен! Ура за Билаабо!“