В чем разница между
Object foo = "something";
String bar = String.valueOf(foo);
и
Object foo = "something";
String bar = (String) foo;
В чем разница между
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(foo)
вызывает метод foo .toString()
, создает из него String
и назначает его панели .
Casting просто назначит foo для строки , так как типы соответствуют. В противном случае выражение будет вызывать ClassCastException
.
Кастинг означает, что объект должен иметь тип String, а String.valueOf()
может принимать и другие типы.
Оба генерируют один и тот же вывод в случае String
.
Casting
терпит неудачу, если предоставленный объект не является string.
Метод String.valueOf используется для получения репрезентации String этого объекта параметра.
(String) значение передает значение объекта в строку.
Вы можете использовать метод 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");
Выход: strCastOfObj is null
Первый, т.е. String.valueOf
возвращает строку только в том случае, если объект является представляемым типом, который является типом значения или строкой. Иначе он выдает исключение.
В последнем случае вы произвольно выполняете кастинг, который может выйти из строя, если объект не является строкой.
Пример в Интернете.
в String.valueOf(); string as work typecasting весь аргумент, переданный в метод valueof(), преобразовать в String и точно так же, как integer.string() преобразовать целое число в строку только