今天在使用這個的時候發現,他們三者好像在某些場所都是能夠用的,可是難免會讓人想到那既然它們三者這麼的類似,那麼總有些什麼區別吧。我也在網上找了一些資料看。本身也看了API文檔,就將他們三的區別總結一下吧。用了這麼長時間,才發現有這些的不一樣,也是挺慚愧的。java
先說他們三的做用是什麼吧:沒什麼特別的做用,就是讓咱們獲得的對象或參數類型,按照要求轉成字符串的形式。程序員
String:毫無疑問,這種就是強轉形式,簡單方便,效率高。java程序員可能看到效率高或許有些激動,可是它有他的很差,那就是侷限性。在java的世界裏沒有什麼東西是沒有缺點的,總有一些好的方面同時也有一些很差的。很差的就是,他只能是強轉本來就是字符串的東西,若是本來不是字符串的話,那麼就會報錯。好比:安全
Boolean boolean1 = true; String str3 = (String)boolean1;//這行代碼會報錯,編譯不過 String str4 = boolean1.toString();//正常 String str5 = String.valueOf(boolean1);//正常
經過上面的例子咱們就很清晰的明白了,String強轉的方式當然輕鬆,那麼它是有很大的侷限性的。在用的時候要謹慎。指針
toString():在API文檔中是這樣說的,返回此對象自己(它已是一個字符串了!!!)。按照它的意思就是說通常的對象或者參數都是有toString()的方法的,只是要注意在一個參數定義爲int類型是就沒有這個方法了。還有就是當參數爲空的時候.toString()方法就會報出空指針異常,這是這個方法的很差的地方使用時須要仔細斟酌一下。好比:code
Object obj = getObject(); Syystem.out.println(obj.toString());
就如這上面的代碼表示的同樣,若是obj不爲空,那麼就能正常編譯,那麼若是obj取出來爲空的話,那麼就會報出空指針異常的。對象
最重要的角色出場了String.valueOf():這個方法是靜態的,直接經過String調用,能夠說是完美,只是平時不習慣這樣寫而已,這樣的實現避免了前面兩個的不足和缺點。首先來看看他內部的實現機制:文檔
public static String valueOf(Object obj){return (obj==null) ? "null" : obj.toString()};
在內部就是作了爲空的判斷的,因此就不會報出空指針異常。字符串
總結: 這三者的使用,我的以爲應該使用String.valueOf()的方式。這樣的使用安全可靠,不會帶來異常。說的有不對的地方,但願你們指正批評。get