Каков наилучший способ преобразования примитивного типа данных в String - программирование
Подтвердить что ты не робот

Каков наилучший способ преобразования примитивного типа данных в String

Я могу преобразовать целое число в строку, используя

String s = "" + 4; // correct, but poor style
or
String u = Integer.toString(4); // this is good

Я могу преобразовать double в строку, используя

String s = "" + 4.5; // correct, but poor style
or
String u = Double.toString(4.5); // this is good

Я могу использовать подход String s = "" + data для преобразования int или double в String. Хотя если я хочу использовать другой подход, используя toString(), я должен использовать класс Wrapper для каждого типа данных. Тогда почему в некоторые книги упоминается, что первый подход плохой, а второй - лучший. Какой из них лучший подход и почему?

4b9b3361

Ответ 1

Я бы использовал

String.valueOf(...)

Вы можете использовать один и тот же код для всех типов, но без отвратительной и бессмысленной конкатенации строк.

Обратите внимание, что он также говорит точно, что вы хотите - строковое значение, соответствующее данному примитивному значению. Сравните это с подходом "" + x, где вы применяете конкатенацию строк, даже если у вас нет намерения конкатенировать что-либо, а пустая строка вам не подходит. (Вероятно, это дороже, но я вижу, что я читаю больше, чем производительность.)

Ответ 2

Как насчет String.valueOf()? Он overridden перегружен для всех примитивных типов и делегирует toString() для ссылочных типов.

Ответ 3

String s = "" + 4;

Скомпилирован с помощью этого кода:

StringBuffer _$_helper = new StringBuffer("");
_$_helper.append(Integer.toString(4));
String s = _$_helper.toString();

Очевидно, что это довольно бесполезно. Имейте в виду, что за сценой компилятор всегда использует StringBuffers, если вы используете + в asociation со строкой

Ответ 4

Там третий - String.valueOf(..) (который вызывает Wrapper.toString(..)

На самом деле компилятор добавляет Wrapper.toString(..) в этих местах, поэтому он одинаковый с точки зрения байт-кода. Но ""+x является более уродливым.

Ответ 5

Способ конкатенации строки создает дополнительный объект (который затем получает GCed), что является одной из причин, по которым он считается "более бедным". Плюс это сложнее и менее удобочитаемо, что, как указывает Джон Скит, обычно является большим соображением.

Ответ 6

Я бы также использовал метод String.valueOf(), который, по сути, использует объект Wrapper примитивного типа и вызывает для вас метод toString():

Пример: в классе String:

public static String valueOf(int i) {
        return Integer.toString(i, 10);
    }

Ответ 7

Добавление двойной кавычки - плохой способ сделать ее особенно для удобства чтения. Я бы подумал об использовании некоторых классов Apache для преобразования или написания собственных методов использования для этого типа вещей.

Ответ 8

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

Ответ 9

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

MessageFormat.format("The value of XYZ object is {0}", object);

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

Нужно ли упоминать об этом, также избегает возможной проблемы NPE при вызове object.toString()?