1. 程式人生 > >String String.valueOf() toString()

String String.valueOf() toString()

margin 參數 number log 局限 不同 ble 靜態 lap

今天在使用這個的時候發現,他們三者好像在某些場所都是可以用的,但是不免會讓人想到那既然它們三者這麽的相似,那麽總有些什麽區別吧。我也在網上找了一些資料看。自己也看了API文檔,就將他們三的區別總結一下吧。用了這麽長時間,才發現有這些的不同,也是挺慚愧的。

  先說他們三的作用是什麽吧:沒什麽特別的作用,就是讓我們得到的對象或參數類型,按照要求轉成字符串的形式。

    1. String:毫無疑問,這種就是強轉形式,簡單方便,效率高。java程序員可能看到效率高或許有些激動,但是它有他的不好,那就是局限性。在java的世界裏沒有什麽東西是沒有缺點的,總有一些好的方面同時也有一些不好的。不好的就是,他只能是強轉原本就是字符串的東西,如果原本不是字符串的話,那麽就會報錯。比如:
      1 2 3 4 5 Boolean boolean1 = true; String str3 = (String)boolean1;//這行代碼會報錯,編譯不過 String str4 = boolean1.toString();//正常 String str5 = String.valueOf(boolean1);//正常

      通過上面的例子我們就很清晰的明白了,String強轉的方式固然輕松,那麽它是有很大的局限性的。在用的時候要謹慎。

    2. toString():在API文檔中是這樣說的,返回此對象本身(它已經是一個字符串了!!!)。按照它的意思就是說一般的對象或者參數都是有toString()的方法的,只是要註意在一個參數定義為int類型是就沒有這個方法了。還有就是當參數為空的時候.toString()方法就會報出空指針異常,這是這個方法的不好的地方使用時需要仔細斟酌一下。比如:
      1 2 Object obj = getObject(); Syystem.out.println(obj.toString());

      就如這上面的代碼表示的一樣,如果obj不為空,那麽就能正常編譯,那麽如果obj取出來為空的話,那麽就會報出空指針異常的。

    3. 最重要的角色出場了String.valueOf():這個方法是靜態的,直接通過String調用,可以說是完美,只是平時不習慣這樣寫而已,這樣的實現避免了前面兩個的不足和缺點。首先來看看他內部的實現機制:
      1 public static String valueOf(Object obj){
      return (obj==null) ? "null" : obj.toString()};

      在內部就是做了為空的判斷的,所以就不會報出空指針異常。

String String.valueOf() toString()