kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Guilherme
Guilherme
Вопрос

Что происходит, когда компилятор Java видит много конкатенаций строк в одной строке?

Предположим, у меня есть выражение на Java, такое как:

String s = "abc" + methodReturningAString() + "ghi" + 
                anotherMethodReturningAString() + "omn" + "blablabla";

Как ведет себя компилятор JDK по умолчанию в Java? Делает ли он просто пять конкатенаций или же здесь используется умный трюк?

30 2009-08-18T21:15:00+00:00 1
 Kip
Kip
Редактировал вопрос 18-го августа 2009 в 9:23
Программирование
java
string
performance
concatenation
Решение / Ответ
 Kip
Kip
18-го августа 2009 в 9:17
2009-08-18T21:17:09+00:00
Дополнительно
Источник
Редактировать
#9384702

Он генерирует эквивалент:

String s = new StringBuilder("abc")
           .append(methodReturningAString())
           .append("ghi")
           .append(anotherMethodReturningAString())
           .append("omn")
           .append("blablabla")
           .toString();

Он достаточно умен, чтобы предварительно конкатенировать статические строки (т.е. "omn" + "blablabla"). Вы можете назвать использование StringBuilder "трюком производительности", если хотите. Это определенно лучше для производительности, чем выполнять пять конкатенаций, приводящих к четырем ненужным временным строкам. Кроме того, использование StringBuilder было улучшением производительности в (я думаю) Java 5; до этого использовался StringBuffer.

Редактирование: как указано в комментариях, статические строки предварительно конкатенируются, только если они находятся в начале конкатенации. В противном случае нарушается порядок операций (хотя в данном случае, я думаю, Sun может это оправдать). Итак, учитывая следующее:

String s = "abc" + "def" + foo() + "uvw" + "xyz";

он будет скомпилирован следующим образом:

String s = new StringBuilder("abcdef")
           .append(foo())
           .append("uvw")
           .append("xyz")
           .toString();
Michael Myers
Michael Myers
Редактировал ответ 18-го августа 2009 в 10:13
40
0
Похожие сообщества 11
pro.jvm
pro.jvm
5 814 пользователей
Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез
Открыть telegram
learn.java
learn.java
5 375 пользователей
Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat
Открыть telegram
Java & Co
Java & Co
4 434 пользователей
Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/179171 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude
Открыть telegram
pro.JVM Jobs Chat
pro.JVM Jobs Chat
2 564 пользователей
Чат для обсуждения вакансий на JVM языках. Правила: - Никакого спама - Никакого троллинга и оскорблений участников - Размещение вакансий только через канал Канал для вакансий: @jvmjobs Основной чат: @jvmchat Наши друзья: @scala_jobs, @scala_jobs_feed
Открыть telegram
Java/Kotlin and more
Java/Kotlin and more
2 063 пользователей
чат о Java/Kotlin и связанных технологиях. We're discussing: job, tech questions etc. languages: russian, java, eng, kotlin Ссылка на чат: t.me/springframeworkio
Открыть telegram
Java Underground
Java Underground
1 751 пользователей
Библиотека по Java https://t.me/javalib Наше сообщество ВК: https://vk.com/javatutorial Вакансии и резюме свои строго в этот канал: https://t.me/job_java
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией