原文 http://www.cnblogs.com/yuxiaoqi/p/3562161.html
public class Test {
public static void main(String args[]) {
Map<String,Object> map = new HashMap<String, Object>();
map.put("intNum", new Integer(1));
String a = map.get("intNum").toString(); // .toString
System.out.println("intNum.toString():"+a);
String c = String.valueOf(a);
System.out.println("String.valueOf(intNum):"+c);
// 强转 报错: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
String b = (String)map.get("intNum");
System.out.println("(String)intNum:"+b);
}
}
精华:
1、toString一个方法,任何一个对象都可以有自己的字符串表达方式,就要比任何物品都可以有自己的名字一样,你可以重写这个方法,返回你需要的字符串数据
而强制类型转换成String,就是将原本不是String类型的对象转换成String类型,它不会去调用tostring方法。这就相当于你将物品A当成物品B来使用,如果两者不能转换的话,就相当于你把石头当救生圈使用了。。
2、
在任何对象使用调研toString方法之前,最好验证一下对象是否为null,这是最理想的做法。
如果不想之前验证,那么就要用String.valueOf方法来处理对象或者数据类型。
如果不想之前验证,那么就要用String.valueOf方法来处理对象或者数据类型。
3、“转”这个术语,其实是不确切的,或者说是不科学的。
一个对象一经建立,其类型已经确定,所谓的“强转”不过是强行改变你看待它的方式。所以,英文中类型“转换”叫做Type Casting或者Class Casting,使用cast以说明改变的是其外在。
SQL Server有一个用来转型的函数叫做cast,后来提供了另一个函数叫做convert,二者略有不同,相差很小,官方推荐用convert,其实就是因为这两个函数实际上改换了数据的内在类型,所以用convert表述更为精准。
理解了我这段话,你就知道toString和强“转”之间有什么区别了。