toString和(String)的区别
toString( )
每个非基本类型对象都有toString()方法,当编译器需要一个String类型,而你只有一个对象时,该方法会被调用。
Object类的toString()方法返回的字符串形式:类名+@+此对象哈希码的无符号十六进制:getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
下面代码示例分别调用了Soap.toString()和Bath.toString(),
程序输出:
Inside Bath()
Soap()
s1=happy
s2=happy
s3=joy
s4=joy
castille=Constructed
class Soap{
private String s;
Soap(){
System.out.println("Soap()");
s = "Constructed";
}
public String toString() {
return s;
}
}
public class Bath {
private String
s1 = "happy",
s2 = "happy",
s3,s4;
private Soap castille;
public Bath() {
System.out.println("Inside Bath()");
s3 = "joy";
castille = new Soap();
}
public String toString() {
if(s4 == null)
s4 = "joy";
return
"s1="+s1+"\n"+
"s2="+s2+"\n"+
"s3="+s3+"\n"+
"s4="+s4+"\n"+
"castille="+castille+"\n";
}
public static void main(String[] args) {
Bath bath = new Bath();
System.out.println(bath);
}
}
String.valueOf()
toString()方法的输入对象不能是null,String.valueOf()调用了toString()方法,调用之前先判断对象是否为null。下面是String.valueOf()的源码:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
注意,当object为null时,String.valueOf(object)返回的是字符串“null”,而不是null。
(String)Data强制类型转换
强制类型转换
Java中数据类型及其之间的转换
子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。
例1
Father father = new Son();
Son son = (Son)father;
这里,Son对象实例被向上转型为Father类型,但实例father在内存上的本质上还是Son类型。因此第二条语句可行。
例2
Father father = new Father();
Son son = (Son) father;
这里会抛出ClassCastException异常信息,当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。
因此(String)Data只能当Data的类型本质是String时,才能使用:
Object obj1 = new String("lucky");
String strVal = (String)obj1;