Только что случайно наткнулся на два вида преобразований (раньше даже внимания н
обращал, что они разные и использовал первое преобразование для неприметивных объектов, с применением instanceof, а остальное — для преобразования примитивных):
String text = (String) textField.getText();
String text = String.valueOf(textField.getText());
Чем отличаются эти преобразования и есть ли сильные различия?
Ответы
Ответ 1
Как говорится в ответе на аналогичный вопрос на английском:
Кастинг к строке работает, только если объект является строкой:
Object reallyAString = "foo";
String str = (String) reallyAString; // works.
И не работает, если объект — это что-то ещё:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
В тоже время String.valueOf() пытается конвертировать к String всё, что ему передали
Он работает и с примитивами (42), и с объектами (new Integer(42), используя метод объектов toString()):
String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"
Обратите внимание на последний пример: при передаче null в String.valueOf() будет возвращена строка "null".
Ответ 2
Второй вариант переводит любой тип в String. Это даже не приведение типа, а ПРЕДСТАВЛЕНИЕ параметра этой функции в виде строки. Первый же вариант - да, чистое "кастование"
Комментариев нет:
Отправить комментарий