Page 198 - 6253
P. 198

2301506

                  2301506

                  Незважаючи  на  те,  що  однакові  за  значенням  рядкові  об'єкти  розташовані  в

            різних  ділянках  пам'яті,  значення  їх  хеш-кодів  співпадають.  Оскільки  у  Java  всі

            посилання  зберігаються  в  стеку,  а  об'єкти  –  в  купі,  то  при  створенні  об'єкту  s2

            спочатку  створюється  посилання,  а  потім  це  посилання  зв’язується  з  відповідним

            об’єктом. Тому s2 асоціюється  із вже  існуючим літералом, оскільки об'єкт s1  уже

            зв’язаний із посилання на цей літерал. При створенні об’єкту s3 відбувається виклик

            конструктора, тобто виділення пам'яті  відбувається раніше за його  ініціалізацію,  і

            тому в купу поміщається новий об'єкт.

                  У  мові  Java  можна  об’єднувати  рядки  із  даними  інших  типів.  Для  цього

            використовується  оператор  об’єднання  або  конкатенації  «+».  Під  час  операції

            об’єднання  усі  типи  даних  приводяться  автоматично  до  рядків.  Компілятор

            перетворює операнди в їх рядкові еквіваленти, в той час як інші операнди оператора

            «+» є екземплярами класу String.

                  Проте, під час такого об’єднання необхідно враховувати один досить важливий

            момент. Розглянемо фрагмент програми в якому відбувається об’єднання декількох

            рядків:

                  String str = "Десять: " + 4 + 6;

                  System.out.println(str);

                  Запустивши програму на виконання отримаємо наступний результат:



                  Десять: 46

                  Такий  результат  є  досить  логічним,  оскільки  пріоритети  операторів

            забезпечують спочатку об’єднання рядка "Десять: " з рядковим еквівалентом числа

            4, а потім результат об’єднується з рядковим еквівалентом числа 6.

                  Для  того,  щоб  отримати  правильний  результат  необхідно  змінити  пріоритет

            виконання операцій, шляхом вкладення виразу «4 + 6» в круглі дужки.

                  String str = "Десять: " + (4 + 6);

                  System.out.println(str);

                  Запустивши програму на виконання отримаємо наступний результат:





                                                              197
   193   194   195   196   197   198   199   200   201   202   203