В чем разница между
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 (), конвертируют целое число только в строку