jugLviv

Meta


Share on:


Core: String part 1

juglvivjuglviv

Одним з наслідків ресету стане цикл статей про різні аспекти використання JAVA.
В цих статтях я намагатимусь пояснити магію, яка відбувається з кодом.
І звичайно коментарі, зауваження, пропозиці – вітаються!

Отже: Магія String part 1

Як ви знаєте String в Java це об’єкт для маніпуляції із масивами символів. Але не все так просто.

Магія String Immutable.

Що це означає?  це означає:

String a ="1";
System.out.println(a.hashCode());
a = a+"No.";
System.out.println(a.hashCode());


(Hash code змінився)

Кожного разу, коли ви ‘змінюєте’ значення String – створюється новий об’єкт.
Тобто стрічка коду  a = a+”No.” не змінить значення поточного об’єкта, а створить новий об’єкт.
Ви запитаєте чому immutable? Причиною цьому є місце, де зберігаються стрінги String pool – це реалізація патерна Flyweight. Якщо б String не був би immutable, тоді б при зміні значення однієї із змінних, які вказують на об’єкт в пулі – всі інші також б змінювались, що є недоступним.

ПС .Потрібно бути обережним при конкатeнації стрінгів. Необережне поводження з ними може привести до java.lang.OutOfMemoryError.

Магія String. Порівння.

Порівняння String це мабуть улюбленне питання на всіх співбесідах і ось приклад того, що можна зустріти як запитання:

String str1 = "JUG";
String str2 = "JUG";
String str3 = new String("JUG");

System.out.println("str1 == str2 is " + (str1 == str2));
System.out.println("str1 == str3 is " + (str1 == str3));
System.out.println("str1.intern() == str3.intern() is " +
       (str1.intern() == str3.intern()));

System.out.println(" ");
System.out.println("str1.equals(str2) is " + str1.equals(str2));
System.out.println("str1.equals(str3) is " + str1.equals(str3));
System.out.println("str1.intern().equals(str3.intern()) is " + 
    str1.intern().equals(str3.intern()));

System.out.println(" ");
System.out.println("str1.hashCode() "+str1.hashCode());
System.out.println("str2.hashCode() "+str2.hashCode());
System.out.println("str3.hashCode() "+str3.hashCode());

Тут треба розуміти декілька речей:

Знаючи ці речі – бідь-яка співбесіда пройде як по маслу(стосовно питання порівння String) 😉

Продовження буде… (Я сподіваюсь 🙂 )

ПС. Якщо ви помітили помилки чи бажаєте доповнити, пишіть – радо виправлю.

ПС. Важливі ваші відгуки про ініціативу написяння статей і чи стиль написання є доступним.

ВАЖЛИВО: Якщо ви маєте бажання поділитись з оточуючими цікавою інформацією – пишіть!
Наша адреса: bohdan.bandrivskyy@gmail.com чи на адресу блогу jug.lviv@gmail.com
Будь-яка допомога в написанні статті з нашої сторони гарантована.



juglviv
Author