1. 程式人生 > >toString() / String.valueOf() VS 強制型別轉換 (String)

toString() / String.valueOf() VS 強制型別轉換 (String)

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方法來處理物件或者資料型別。

3、“轉”這個術語,其實是不確切的,或者說是不科學的。
一個物件一經建立,其型別已經確定,所謂的“強轉”不過是強行改變你看待它的方式。所以,英文中型別“轉換”叫做Type Casting或者Class Casting,使用cast以說明改變的是其外在。
SQL Server有一個用來轉型的函式叫做cast,後來提供了另一個函式叫做convert,二者略有不同,相差很小,官方推薦用convert,其實就是因為這兩個函式實際上改換了資料的內在型別,所以用convert表述更為精準。
理解了我這段話,你就知道toString和強“轉”之間有什麼區別了。