java.toString() ,(String),String.valueOf的區別

(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,但它們意義相同嗎?

相關文章
相關標籤/搜索