В чем разница между
Object foo = "something";
String bar = String.valueOf(foo);
а также
Object foo = "something";
String bar = (String) foo;
Ответы:
Преобразование в строку работает только тогда, когда объект на самом деле является строкой:
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"
.
String.valueOf()
и obj.toString()
? (Первое, что приходит мне в голову, это то, что obj.toString()
будет выполнено исключение, если obj
будет null.)
null
. Если вы посмотрите на реализацию String.valueOf()
в своем JDK, вы увидите, что все, что он делает для ненулевых ссылок, - это вызывать toString()
.
String.valueOf()
что это элегантнее, чем актерский состав. Но если String.valueOf()
все, что делает кастинг, и многое другое, есть ли причины, по которым можно было бы использовать кастинг? Почему он не устарел?
String.valueOf((Object) null)
вернет String "null". Вызов его с помощью литерала null
вызовет String # valueOf (char []), который фактически выбрасывает NPE, когда вы переходите null
.
String.valueOf(foo)
Запускаю Foo «s .toString()
метода и присваивает результат к бару . Это нулевое значение и типобезопасная операция.
Кастинг будет просто присвойте Foo в бар , если типы соответствия. В противном случае выражение выдаст ClassCastException
.
String.valueOf(Object)
призываObject.toString()
Оба генерируют одинаковый вывод в случае String
.
Casting
не работает, если предоставленный объект не является string.
Метод String.valueOf используется для получения строкового представления объекта параметра.
(String) value преобразует значение объекта в строку.
Вы можете использовать метод String.valueOf для получения строкового представления объекта, не беспокоясь о нулевых ссылках. Если вы попытаетесь применить String к нулевой ссылке, вы получите исключение NullPointerException.
Первый, т.е. String.valueOf
возвращает строку, только если объект является представимым типом, который является типом значения или String .. В противном случае он вызывает исключение.
В последнем случае вы выполняете прямое приведение типов, что может привести к сбою, если объект не является строкой.
Онлайн-пример.
в String.valueOf (); строка как работа, типизирующая все аргументы, переданные в методе valueof (), конвертируются в String и, как и integer.string (), конвертируют целое число только в строку