Page 37 - 4657
P. 37
У Java цікаво те, що для кожної строки літерала
створюється свій екземпляр класу String, так що ви можете
викликати методи цього класу безпосередньо зі строками
літералами, а не тільки зі силочними змінними. Черговий
приклад також виводить число 3.
System.out.println("abc".Length());
Злиття рядків
Рядок
String s = «Не is » + age + " years old.";
у який за допомогою оператора + три рядки поєднуються в
одну, про-честь і зрозуміти безумовно легше, ніж її еквівалент,
записаний з явними викликами тих самих методів, що неявно
були використані в першому прикладі:
String s = new StringBuffer("He is ").append(age);
s.append(" years old.").toString();
По визначенню кожен об'єкт класу String не може
змінюватись. Не можна ні вставити нові символи у вже
існуючий рядок, ні поміняти в ній одні символи на інші. І додати
один рядок у кінець інший теж не можна. Тому транслятор Java
перетворить операціі, що виглядають, як модифікація об'єктів
String, в операції з спорідненим класом StringBuffer.
Зауваження.
Усе це може показатися вам необґрунтовано складним. А
чому не можна обійтися одним класом String, дозволивши йому
поводитися розмірно так само, як StringBuffer? Уся справа в
продуктивності. Той факт, що об'єкти типу String у Java
незмінні, дозволяє транслятору застосовувати до операцій з
ними різні способи оптимізації.
Послідовність виконання операторів
Давайте ще раз звернемося до нашого останнього приклада:
String s = "Не is " + age + " years old.";
35