java-toString()、(String)、String.valueOf 的区别
-
Object x = new Integer(1218); System.out.println((String)x);
-
如上代码编译通过,运行时报错: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- toString()
- toString()是在Object中定义的,因此,任何继承Object的类都具有这个方法。
- 建议所有子类都重写此方法
- 它的值等于:
getClass().getName()+'@'+Integer.toHexString(hashCode())
- 使用toString()的对象不能为null,否则会抛出异常
java.lang.NullPointerException
- String.valueOf()
- String.valueOf()解决了toString()使用对象不能为空的问题
-
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
- 如果对象为null,则返回字符串“null”
- (String)
- 它是强制转换
-
Integer o = new Integer(1218); System.out.println((String)o);
- 如上代码编译时就会报错:
Cannot cast from Integer to String
,说明Integer不能通过强制转换成String。 -
Object x = new Integer(1218); System.out.println((String)x);
- 在编译时没错,运行时抛出异常。这是因为x在表面上是Object,实际上是Integer。而Object是可以通过强制转换成为String的。所以,在编译的时候,x被当成了Object,大家相安无事,真正运行的时候,x被查出来是Integer,理所当然就抛出了ClassCastException。