Возможно, на ваш вопрос сложно ответить точно, отчасти потому, что ответ будет зависеть от фактической реализации первой версии.Это, в свою очередь, будет зависеть от того, какую версию Java вы используете, и что решил сделать компилятор.
Если предположить, что компилятор сохраняет первую версию дословно, как вы ее написали, то да, первую версиюможет быть более неэффективным, потому что это потребовало бы выделения новой строки для каждого шага в процессе обращения.Вторая версия, напротив, просто поддерживает один массив символов.
Однако, если компилятор достаточно умен, чтобы использовать StringBuilder
, тогда ответ меняется.Рассмотрим следующую первую версию:
String reverse1(String s) {
StringBuilder answer = new StringBuilder();
for (int j = s.length() - 1; j >= 0; j--)
answer.append(s.charAt(j));
return answer;
}
Под капотом StringBuilder
реализован с использованием массива символов.Таким образом, вызов StringBuilder#append
чем-то похож на вторую версию, то есть он просто добавляет новые символы в конец буфера.
Итак, если ваша первая версия выполняется с использованием литерала String
, то это более неэффективночем вторая версия, но с использованием StringBuilder
это может быть наравне со второй версией.