Java toString 和String.ValueOf() 的區別和埋下的坑

Java字符串的toStiring 和String.ValueOf()都有一個相同的功能那就是把非String類型的對象,轉換成String,比如:

String str1 = obj.toStiring(); 該方法是將Object類型的obj對象轉換成String,但是這個的前提示要保證obj對象不爲null,如果爲null 將會拋出NullPointerException異常;

String str1 = String.valueOf(obj);該採用String的valueOf方法也會把Object對象轉換成String類型,通過這種方法轉型如果obj爲null不會拋出NullPointerException異常;而是將obj對象轉換成"null"字符串。這樣 str1 就被賦值爲 "null",這樣乍一看沒什麼問題,感覺這樣可以避免NullPointerException異常,如果後期要對str1要做其他類型的轉換就會出問題比如:Integer.valueOf(str1);這是就會報錯提示類型轉換出錯。到這裏就會發現 String.valueOf()埋下的坑了。所以一般情況下在使用這兩個方法前最後都要考慮一下null值得情況,不然後期發現問題,改數據將是非常痛苦的。

jdk裏String# valueOf(Object)源碼如下:

      public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }

      從上面的源碼可以很清晰的看出null值不用擔心的理由。但是,這也恰恰給了我們隱患。我們應當注意到,當object爲null 時,String.valueOf(object)的值是字符串”null”,而不是null!!!在使用過程中切記要注意。

而Object的toString()源碼如下:

 
   public String toString() {
        return getClass().getName() + '@' + Integer.toHexString(hashCode());
    }

如果調用對象null 的話調用getName()方法就回拋出空指針異常。

所以在使用這兩個方法時一定要慎重!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章