В книге вычитал, что приведение int
в String
с использованием конкатенации, например, где а
это int
String s = a + "";
это плохой способ. А вот
String s = Integer.toString(a);
Или
String s = String.valueOf(a);
Это хорошие способы. Почему?
Нет, конкатенация - это не плохо. Она выглядит более наглядно и в большинстве случаев, javac
умеет ее оптимизировать с использованием java.lang.StringBuilder
. Так же, срабатывает интернирование, что позволяет не создавать множество объектов. Например,
String value = "hello world" + 1;
System.out.println(value == "hello world1");
выведет
true
А методы Integer.toString
и String.valueOf
идентичны, т.к. последний делегирует вызов второму. Но у них есть особенность - при каждом вызове создается новая строка.
Ну, может быть, если там не просто число, а выражение, не сразу очевидно, что получится в результате. Например такой код:
System.out.println(6 + 4 + "");
System.out.println("" + 4 + 6);
В первой строке выведет 10, а во второй - 46.
Это плохо потому, что Java - это строго типизированный язык, и неявное приведение типов является нарушением парадигмы языка.
Если у вас небольшое приложение, в код которого никто кроме вас никогда не полезет - можно изгаляться как угодно, но представьте, что это сложный проект, который придется править какому нибудь стажеру.
Два варианта кода:
String s = a + "";
String s = Integer.toString(a);
Второй является совершенно обычным и стандартным паттерном, который не вызовет никаких затруднений, а на первом он споткнется и будет пару минут тупить, стараясь понять, что там происходит и почему решили сделать именно так.
При использовании конкатенации выполняется несколько ненужных действий:
неявно вызывается Integer.toString(a)
;
выделяется StringBuffer
для конкатенации, куда копируется пустая строка ""
и переведённое в строку число
преобразовывается StringBuffer
в строку
Реализация может отличаться и компилятор возможно это оптимизирует, но лучше не использовать такой метод и явно вызывать преобразование числа в строку.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Скажите пожалуйста, как на java server face реализовать панель открытых окон? Строим учетную программу, нужно открыть несколько окон одновременно...
Разбираюсь с Spring Security(и параллельно пишу веб приложение)Всё работает, но есть пара вопросов
Просьба помочь с алгоритмом действийЕсть DrawerLayout по нажатию на его пункт отрывается фрагмент-1 в котором присутствует RecyclerView который выводит...
И снова я со своей книгой "Для про"Почему в цикле for не рекомендуется прерывание с помощью break? Как же тогда это сделать?