2013-11-12 2 views
2

Я вызовТип I + "ABC" в Java

sb.append(i+"\n"); 

где

StringBuilder sb= new StringBuilder(); 
int i. 

Что такое я + "\ п" приведения к here-- в Строки, StringBuffer, CharSequence, знак массив, ...?

StringBuilder имеет Append() каждый из которых принимает из параметров, который является объекта, A Строка, A StringBuilder (это один частный метод), а StringBuffer, а CharSequence параметр, массив символов, .. среди среди других. Я пытаюсь выяснить, из какого из них вызывается - чтобы избежать вызова по String param для быстрой обработки.

Заранее спасибо.

+0

Написание 'sb.append (i); sb.append ('\ n'); 'будет эквивалентным. Я предполагаю, что это будет быстрее, так как не будет создан промежуточный объект 'String', но мы не знали бы точно, не выполнив некоторые тесты. – ajb

+0

Это может быть быстрее ... многие реализации JVM выполняют конкатенацию String с использованием промежуточного StringBuilder по причинам производительности (хотя я не уверен, что они сделают это с двумя аргументами). Если это так, конкатенированный аргумент может быть медленнее ... но я не могу себе представить, что разница была бы практически важной на практике. – scottb

ответ

8

Всякий раз, когда оператор + применяется к String и переменной любого другого типа, у вас есть String конкатенация. Значение i + "\n" - это String.

java language specification покрывает этот

Если только один операнд выражения имеет тип String, то строка преобразования (§5.1.11) выполняется на другой операнд для получения строки во время выполнения. Результатом конкатенации строк является ссылка на объект String, который является конкатенацией двух операндов. Символы левого операнда предшествуют символам правого операнда во вновь созданной строке.

Поэтому append() метод называют это тот, который принимает String argument.

Как @scottb комментарии, Java сначала преобразует объекты, участвующие в конкатенации String, в объекты String. This is described in the JLS chapter on String conversion. Примитивы распаковываются к их типам обертки. Если ссылка является чем-то иным, кроме null, то на ссылочном объекте вызывается метод toString(). Если ссылка null, то используется String"null".

+0

Стоит отметить, что представление нестрокового объекта определяется вызовом его метода 'toString()'.Если элемент non-String является примитивным, он сначала автобоксирован, а затем вызывается метод toString() '. Это одна из причин, по которой рекомендуется переопределять метод toString() 'в ваших собственных классах. – scottb

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