(String)java
毫無疑問,這種就是強轉形式,簡單方便,效率高。java程序員可能看到效率高或許有些激動,可是它有他的很差,那就是侷限性。在java的世界裏沒有什麼東西是沒有缺點的,總有一些好的方面同時也有一些很差的。很差的就是,他只能是強轉本來就是字符串的東西,若是本來不是字符串的話,那麼就會報錯。好比:程序員
Boolean boolean1 = true; String str3 = (String)boolean1;//這行代碼會報錯,編譯不過 String str4 = boolean1.toString();//正常 String str5 = String.valueOf(boolean1);//正常
這是標準的類型轉換,將object轉成String類型的值。使用這種方法時,須要注意的是類型必須能轉成String類型。所以最好用instanceof作個類型檢查,以判斷是否能夠轉換。不然容易拋出CalssCastException異常。此外,需特別當心的是因定義爲Object 類型的對象在轉成String時語法檢查並不會報錯,這將可能致使潛在的錯誤存在。這時要格外當心。this
如:指針
Object obj = new Integer(100); String strVal = (String)obj; // 這裏編譯不會報錯,但在運行時會報錯
在運行時將會出錯,由於將Integer類型強制轉換爲String類型,沒法經過。code
可是,對象
Integer obj = new Integer(100); String strVal = (String)obj; // 這裏編譯便會提示錯誤Cannot cast from Integer to String
如是格式代碼,將會報語法錯誤。此外,因null值能夠強制轉換爲任何java類類型,(String)null也是合法的。文檔
經過上面的例子咱們就很清晰的明白了,String強轉的方式當然輕鬆,可是它是有很大的侷限性的。在用的時候要謹慎。字符串
toString()get
源碼源碼
/** * This object (which is already a string!) is itself returned. * * @return the string itself. */ public String toString() { return this; }
在API文檔中是這樣說的,返回此對象自己(它已是一個字符串了!!!)。按照它的意思就是說通常的對象或者參數都是有toString()的方法的,只是要注意在一個參數定義爲int類型是就沒有這個方法了。還有就是當參數爲空的時候.toString()方法就會報出空指針異常,這是這個方法的很差的地方使用時須要仔細斟酌一下。好比:
Object obj = getObject(); Syystem.out.println(obj.toString());
就如這上面的代碼表示的同樣,若是obj不爲空,那麼就能正常編譯,那麼若是obj取出來爲空的話,那麼就會報出空指針異常的。
在這種使用方法中,由於java.lang.Object類裏已有public方法.toString(),因此對任何嚴格意義上的java對象均可以調用此方法。但在使用時要注意,必須保證object不是null值,不然將拋出NullPointerException異常。採用這種方法時,一般派生類會覆蓋Object裏的toString()方法。
String.valueOf()
/** * Returns the string representation of the <code>Object</code> argument. * * @param obj an <code>Object</code>. * @return if the argument is <code>null</code>, then a string equal to * <code>"null"</code>; otherwise, the value of * <code>obj.toString()</code> is returned. * @see java.lang.Object#toString() */ public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
從上面的源碼能夠很清晰的看出null值不用擔憂的理由。可是,這也偏偏給了咱們隱患。咱們應當注意到,當object爲null 時,String.valueOf(object)的值是字符串」null」,而不是null!!!在使用過程當中切記要注意。
試想一下,若是咱們用
if(String.valueOf(object)==null){System.out.println(「傳入的值是null!」);}
這樣的語句將可能會發生什麼問題。再想一下,向控制檯輸出時,在視覺上以下語句在執行的結果上有什麼不一樣: System.out.println(String.valueOf(null)); System.out.println(null); 咱們看到的輸出將是如出一轍的東西:null,但它們意義相同嗎?