2016-01-27 2 views
1

У меня было несколько людей сказали мне, что такие вещи, как это супер ленивые:Java String intToStr = "" + 5; Почему я не могу это сделать?

int val = 5; 
System.out.println("" + val); 
String myStr = "" + val; 

Почему это лучше, чем String.valueOf (VAL)? Разве он не делает то же самое под капотом?

+4

Это уже ответил ранее, http://stackoverflow.com/questions/7752347/string-valueof-vs-concatenation-with-empty-string – Hank

+1

Это не лучше, чем 'String.valueOf (межд) '; это хуже, и это лениво. –

ответ

1

Это не совсем «лучше», просто короче, что упрощает чтение и ввод. Существует (практически) никакой разницы, хотя реальный пурист мог бы, вероятно, сказать, что это на самом деле хуже, потому что (по крайней мере, в отсутствие оптимизации) это создает промежуточный объект StringBuilder, который затем добавляется символом перед преобразованием в строку, так что это может быть больше клещей, чем .valueOf.

0

От JLS:

Реализация может выбрать, чтобы выполнять преобразование и конкатенацию в один шаг, чтобы избежать создания и удаления промежуточного объекта String. Чтобы увеличить производительность повторной конкатенации строк, компилятор Java может использовать класс StringBuffer или подобный метод для уменьшения количества промежуточных объектов String, созданных при оценке выражения.

Для примитивных типов реализация может также оптимизировать создание объекта-обертки путем преобразования непосредственно из примитивного типа в строку.

Смежные вопросы