之间有什么区别
Object foo = "something";
String bar = String.valueOf(foo);
和
Object foo = "something";
String bar = (String) foo;
Answers:
仅当对象实际上是字符串时,才强制转换为字符串:
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中的实现,您会发现它对非null引用所做的全部工作就是调用toString()
。
String.valueOf()
比演员更优雅。但是,如果String.valueOf()
演员表所做的一切,以及更多,是否有任何理由为什么会选择使用演员表?为什么不弃用它?
String.valueOf((Object) null)
将返回字符串“ null”。用文字调用它null
会调用String#valueOf(char []),当您传入时,它实际上会抛出一个NPE null
。
两种情况下都产生相同的输出String
。
Casting
如果提供的对象不是 string.
String.valueOf方法用于获取其参数对象的String表示形式。
(字符串)值将对象值转换为字符串。
您可以使用String.valueOf方法获取对象的String表示形式,而不必担心null引用。如果尝试将String强制转换为null引用,则将获得NullPointerException。
第一个,即,String.valueOf
仅当对象是可表示的类型(它是值类型)或String时才返回字符串。否则它将引发异常。
在后一种情况下,您将直接强制转换,如果对象不是字符串,则可能会失败。
在线示例。