Использование int + "" плохо для преобразования Java int в строки? - PullRequest
4 голосов
/ 30 сентября 2011

Итак, наш учитель информатики научил нас, как конвертировать int с в String с, выполнив это:

int i=0;
String s = i+"";

Я думаю, он научил нас так, поскольку это был относительно базовый компьютерестествознание (класс средней школы, заметьте), но мне было интересно, было ли это как-то "плохо" по сравнению с:

int i=0;
String s = Integer.toString(i);

Это дороже?Плохая привычка?Заранее спасибо.

Ответы [ 4 ]

9 голосов
/ 30 сентября 2011

В теории

Инструкция

String s = i + "";

выполняет следующее: преобразует i в строку, вызывая Integer.toString(i), и объединяет эту строку в пустую строку.Это вызывает создание трех объектов String и одну конкатенацию.

Инструкция

String s = Integer.toString(i);

выполняет преобразование и только преобразование.

На практике

Большинство JIT-компиляторов могут оптимизировать первый оператор до второго.Я не удивлюсь, если эта оптимизация будет сделана еще раньше (компилятором javac, при компиляции вашего исходного кода Java в байт-код)

8 голосов
/ 30 сентября 2011
i+""

эквивалентно

new StringBuilder().append(i).append("").toString();

так что да, это менее эффективно, но если вы не делаете это в цикле или что-то подобное, вы, вероятно, не заметите этого.

[отредактировано: из комментариев StriplingWarrior-thanks]

4 голосов
/ 30 сентября 2011

Этот метод работает, но он опирается на магию конкатенации строк в Java (которая является одной из немногих областей, связанных с перегрузкой операторов) и может вводить некоторых в заблуждение.

Я считаю, что следующие методыболее ясно:

String.valueOf(123); // => "123"
Integer.toString(123); // => "123"

И, как уже упоминали другие, это приводит к более краткому байт-коду, поскольку позволяет избежать неявного создания нового StringBuilder и сопутствующих вызовов методов.

0 голосов
/ 18 августа 2013

Использование этого метода приведет к компиляции, так как ваш учитель использовал это, вы можете использовать этот метод при выполнении заданий в классе, но чтобы сделать его более чистым, вы могли бы вместо этого использовать следующий код.

int i=0;
String s = Integer.toString(s);

Это выглядит более официальным ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...