92

和有什么区别

Object foo = "something";
String bar = String.valueOf(foo);

Object foo = "something";
String bar = (String) foo;
4

8 回答 8

156

仅当对象实际上是字符串时,转换为字符串才有效:

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"

特别注意最后一个例子:传递nullString.valueOf()将返回字符串"null"

于 2013-05-29T13:33:06.270 回答
20

String.valueOf(foo)调用foo.toString()方法并将结果分配给bar。它是 null 和类型安全操作。

如果类型匹配,转换只会将foo分配给bar 。否则,表达式将抛出一个ClassCastException.

于 2013-05-29T13:34:32.840 回答
5

强制转换意味着对象需要是 String 类型,同时String.valueOf()也可以采用其他类型。

于 2013-05-29T13:32:45.363 回答
5

在 的情况下,两者都生成相同的输出String

Casting如果提供的对象不是,则失败string.

于 2013-05-29T13:33:03.457 回答
2

String.valueOf 方法用于获取其参数对象的字符串表示形式。

(String) value 将对象值转换为字符串。

您可以使用 String.valueOf 方法来获取对象的 String 表示,而不必担心空引用。如果您尝试在空引用上强制转换字符串,您将得到 NullPointerException。

于 2013-05-29T13:36:57.697 回答
1
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

于 2016-11-22T11:02:26.310 回答
0

第一个,即String.valueOf仅当对象是可表示类型(值类型或字符串)时才返回字符串。否则它会引发异常。

在后一种中,如果对象不是字符串,则直接转换可能会失败。

在线示例。

http://ideone.com/p7AGh5

于 2013-05-29T13:33:47.327 回答
0

在 String.valueOf(); 字符串作为工作类型转换 valueof() 方法中传递的所有参数转换为字符串,就像 integer.string() 仅将整数转换为字符串

于 2014-09-13T08:25:06.927 回答