Это не сработает, если объект является чем-то другим:
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".
@AdamStelmaszczyk: Я сомневаюсь, что есть что-то актуальное. Возможно, приведение типов происходит немного быстрее, но другие различия (обработка нулей, способность обрабатывать другие типы) просто значительно более важны, чем любые незначительные различия в производительности, которые могут быть.
Иоахим Зауэр
3
Если продолжить этот вопрос, есть ли существенная разница между вызовом String.valueOf()и obj.toString()? (Первое, что приходит мне в голову, это то, что obj.toString()будет выполнено исключение, если objбудет null.)
Кевин
3
@Kevin: для ссылочных типов (также известных как «объекты») единственная разница в том, что происходит с null. Если вы посмотрите на реализацию String.valueOf()в своем JDK, вы увидите, что все, что он делает для ненулевых ссылок, - это вызывать toString().
Иоахим Зауэр
@JoachimSauer Я всегда думал, String.valueOf()что это элегантнее, чем актерский состав. Но если String.valueOf()все, что делает кастинг, и многое другое, есть ли причины, по которым можно было бы использовать кастинг? Почему он не устарел?
Shahid M Zubair
1
@silver: В самом деле, я упростил. String.valueOf((Object) null)вернет String "null". Вызов его с помощью литерала nullвызовет String # valueOf (char []), который фактически выбрасывает NPE, когда вы переходите null.
Иоахим Зауэр
19
String.valueOf(foo)Запускаю Foo «s .toString()метода и присваивает результат к бару . Это нулевое значение и типобезопасная операция.
Кастинг будет просто присвойте Foo в бар , если типы соответствия. В противном случае выражение выдаст ClassCastException.
Метод String.valueOf используется для получения строкового представления объекта параметра.
(String) value преобразует значение объекта в строку.
Вы можете использовать метод String.valueOf для получения строкового представления объекта, не беспокоясь о нулевых ссылках. Если вы попытаетесь применить String к нулевой ссылке, вы получите исключение NullPointerException.
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");
Первый, т.е. String.valueOfвозвращает строку, только если объект является представимым типом, который является типом значения или String .. В противном случае он вызывает исключение.
В последнем случае вы выполняете прямое приведение типов, что может привести к сбою, если объект не является строкой.
в String.valueOf (); строка как работа, типизирующая все аргументы, переданные в методе valueof (), конвертируются в String и, как и integer.string (), конвертируют целое число только в строку
Ответы:
Преобразование в строку работает только тогда, когда объект на самом деле является строкой:
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, но
String.valueOf()
может принимать и другие типы.источник
Метод String.valueOf используется для получения строкового представления объекта параметра.
(String) value преобразует значение объекта в строку.
Вы можете использовать метод String.valueOf для получения строкового представления объекта, не беспокоясь о нулевых ссылках. Если вы попытаетесь применить String к нулевой ссылке, вы получите исключение NullPointerException.
источник
Выход :
strCastOfObj is null
источник
Первый, т.е.
String.valueOf
возвращает строку, только если объект является представимым типом, который является типом значения или String .. В противном случае он вызывает исключение.В последнем случае вы выполняете прямое приведение типов, что может привести к сбою, если объект не является строкой.
Онлайн-пример.
http://ideone.com/p7AGh5
источник
в String.valueOf (); строка как работа, типизирующая все аргументы, переданные в методе valueof (), конвертируются в String и, как и integer.string (), конвертируют целое число только в строку
источник