toString() / String.valueOf() VS 強制型別轉換 (String)
阿新 • • 發佈:2019-01-30
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和強“轉”之間有什麼區別了。