Звичайні способи: Integer.toString (i) або String.valueOf (i).
Java має спеціальну підтримку для оператора + при використанні з рядками (см. Документація), яка переводить код, в який ви відправили:
під час компіляції. Це трохи менш ефективно (sb.append () закінчується викликом Integer.getChars (). Що в будь-якому випадку було б Integer.toString ()), але воно працює.
Додати порожній рядок:
Додати ціле число:
Витягти фінальну рядок:
пропозиція і поточна робота по зміні цієї поведінки, націлена на JDK 9.
призводить до перетворення рядків з i під час виконання. Загальний тип вираження String. i спочатку перетвориться в об'єкт Integer (new Integer (i)), потім викликається String.valueOf (Object obj). Таким чином, це еквівалентно
Очевидно, це трохи менше результативно, ніж просто виклик String.valueOf (new Integer (i)). який дасть той же результат.
Ця методика викладалася на рівні бакалаврату, починаючи з класу Java, який я взяв більше десяти років тому. Проте, я повинен відзначити, що, IIRC, ми ще не отримали методи класу String і Integer.
Техніка проста і швидка. Якщо все, що я роблю, це щось друкувати, я буду використовувати його (наприклад, System.out.println ( "" + i);). Однак я вважаю, що це не найкращий спосіб зробити конверсію, так як потрібно думку подумати про те, що відбувається, коли Він використовується таким чином. Крім того, якщо продуктивність є проблемою, вона здається більш повільної (більш докладно, як і в інших відповідях).
Просто для усмішок :) Я написав класи для тестування трьох методів: «+ i, Integer.toString і String.ValueOf. Кожен тест тільки що перетворив int від 1 до 10000 в Strings. Потім я запускав кожну команду Linux час п'ять разів. Integer.toString () був трохи швидше, ніж String.valueOf () один раз, вони пов'язані три рази, а String.valueOf () був швидше один раз; Однак різниця не перевищувала декількох мілісекунд.
Техніка «+ i» була повільніше, ніж у кожного тесту, крім одного, коли вона була на 1 мілісекунду швидше, ніж Integer.toString () і на 1 мілісекунду повільніше, ніж String.valueOf () (очевидно, в тому ж тесті, де String. ValueOf () швидше, ніж Integer.toString ()). У той час як це було зазвичай всього на пару мілісекунд повільніше, було одне випробування, де це було приблизно на 50 мілісекунд повільніше. YMMV.
Не забувайте враховувати JIT - перші кілька конверсій будуть набагато повільніше і спотворювати тайминги. На моєму MacBook конкатенація займає
20ns довше, ніж два інших методу (які обидва приймають
Особисто я думаю, що «+» дійсно виглядає так, як оригінал питання плакат стверджує «смердючий». Я використовував багато мов OO крім Java. Якби цей синтаксис був доречний, то Java просто інтерпретувала б i, не потребуючи «" за бажанням, щоб перетворити його в рядок і зробити це, оскільки тип призначення недвусмислен, і тільки одне значення буде надано справа. Інша схоже на «трюк» , щоб обдурити компілятор, поганий mojo, коли розглядаються різні версії Javac, зроблені іншими виробниками або з інших платформ, якщо код коли-небудь потрібно перенести. Чорт забирай, мені потрібно, щоб багато інших OOL просто Візьміть Typecast: (String) i. підморгування
З огляду на мій спосіб навчання і простоту розуміння такої конструкції при швидкому прочитанні коду, я голосую за метод Integer.toString (i). Забуваючи ns або two в тому, як Java реалізує речі в фоновому режимі і String.valueOf (i), цей метод здається мені правдивим і точно говорить про те, що відбувається: у мене є і Integer, і я хочу, щоб він перетворений в рядок.
Хороший момент, зроблений пару раз, можливо, просто використання StringBuilder попереду - хороший відповідь на створення рядків, змішаних з текстом і ints або іншими об'єктами, так як це те, що буде використовуватися в фоновому режимі в будь-якому випадку?
Тільки мої два цента кинули в уже добре оплачувану кошеня відповідей на питання Мана. посмішки
ЗМІНИТИ ВЛАСНИЙ ВІДПОВІДЬ ПІСЛЯ певне відображення: