Как будет правильнее (и займёт меньше времени при выполнении), если на каждой итерации цикла создаётся новая строка?
1 вариант - создание объекта строки в цикле:
while (conn.hasNext()) {
String timerStr = StringUtils.isBlank(conn.getString("time_field")) ? "time" : conn.getString("time_field"));
report.setTimer(new TimerSystem(id, timerStr));
}
2 вариант - вынос создания строки за цикл:
String timerStr;
while (conn.hasNext()) {
timerStr = StringUtils.isBlank(conn.getString("time_field")) ? "time" : conn.getString("time_field"));
report.setTimer(new TimerSystem(id, timerStr));
}
3 вариант - без объявления переменной String:
while (conn.hasNext()) {
report.setTimer(new TimerSystem(id, StringUtils.isBlank(conn.getString("time_field")) ? "time" : conn.getString("time_field"))));
}
Или же все эти варианты абсолютно равнозначны?
P.S. На сайте уже был похожий вопрос Как будет быстрее? java, но мне всё-таки кажется, что здесь работа со строками и примитивными типами может отличаться.
На мой взгляд, оптимизировать в приведенных вариантах нечего. Переменная timerStr
- это всего лишь указатель на строку. Cтрого говоря, сама аллокация памяти и создание новой строки у вас совершенно в другом месте, это зависит от реализации функции conn.getString()
. Внутри цикла вы работаете только с указателями на строки.
Я бы записал в более удобочитаемом виде и не беспокоился о производительности до того момента пока вы не поймете, что именно это место является узким и требует оптимизаций:
while (conn.hasNext()) {
String timeField = conn.getString("time_field");
String timerStr = StringUtils.isBlank(timeField) ? "time" : timeField;
report.setTimer(new TimerSystem(id, timerStr));
}
Дополнительно можно прочитать про string interning.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В Android-приложении у меня реализован функционал по динамическому добавлению textView в linearLayout, и увеличению высоты этого Layout:
Ситуация следующая: есть TextView, текст отличается в зависимости от того, какая дата в системеЯ пытаюсь сделать так, чтобы это изменение происходило...
При попыткt установить в поле значение null я получаю ошибку
Следующий вопрос почему когда в pomxml описана зависимость mysql mysql-connector-java 5