Разница между литьем в String и String.valueOf
В чем разница между
Object foo = "something";
String bar = String.valueOf(foo);
и
Object foo = "something";
String bar = (String) foo;
Ответы
Ответ 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.valueOf(foo)
вызывает метод foo .toString()
, создает из него String
и назначает его панели .
Casting просто назначит foo для строки , так как типы соответствуют. В противном случае выражение будет вызывать ClassCastException
.
Ответ 3
Кастинг означает, что объект должен иметь тип String, а String.valueOf()
может принимать и другие типы.
Ответ 4
Оба генерируют один и тот же вывод в случае String
.
Casting
терпит неудачу, если предоставленный объект не является string.
Ответ 5
Метод String.valueOf используется для получения репрезентации String этого объекта параметра.
(String) значение передает значение объекта в строку.
Вы можете использовать метод String.valueOf для получения строкового представления объекта, не беспокоясь о нулевых ссылках. Если вы попытаетесь наложить String на нулевую ссылку, вы получите исключение NullPointerException.
Ответ 6
final Object obj = null;
final String strValOfObj = String.valueOf(obj);
final String strCastOfObj = (String) obj;
if (strValOfObj == null) System.out.println("strValOfObj is null");
if (strCastOfObj == null) System.out.println("strCastOfObj is null");
Выход: strCastOfObj is null
Ответ 7
Первый, т.е. String.valueOf
возвращает строку только в том случае, если объект является представляемым типом, который является типом значения или строкой. Иначе он выдает исключение.
В последнем случае вы произвольно выполняете кастинг, который может выйти из строя, если объект не является строкой.
Пример в Интернете.
http://ideone.com/p7AGh5
Ответ 8
в String.valueOf(); string as work typecasting весь аргумент, переданный в метод valueof(), преобразовать в String и точно так же, как integer.string() преобразовать целое число в строку только