toString() 和 强制类型转换 (String)
簡述
在Java中,往往需要把一個類型的變量轉換成String 類型。作為菜鳥,有時候我會使用(String) data,有時候就使用data.toString(),如果不行還會試試?String.valueOf(data),但始終不是很清楚它們有什么不同。前幾天在coding,由于是用gwt-ext編寫界面的時候出現了轉型錯誤,所以也沒有提示java.lang.ClassCastException的異常,只是提示gwt exception thrown and not caught。找了半天才發現原來是因為這個,現特記錄一下,以后碰到了也就更清楚些。
看完簡述,如果你已完全了解就可以走了,如果也是不太懂可以看看,如果有不對的地方還可以討論。這也算是開頭加上個簡述的作用,就是已經了解的人不必重復花時間看了。
toString()方法
先看API 中關于 toString()的描述:
返回該對象的字符串表示。通常,toString?方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易于讀懂的信息表達式。建議所有子類都重寫此方法。
Object?類的?toString?方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,它的值等于:?
getClass().getName() + '@' + Integer.toHexString(hashCode())toString()方法返回的是這個對象的字符串表示,就像是這個對象的名字一樣,任何對象都可以有自己的名字,你可以重寫其toString()方法,給其賦予任意的名字。
但是調用toString()方法的對象不能為 null,否則會拋出異常:java.lang.NullPointerException。
String.valueOf()方法
上邊提到,調用toString()方法的對象不能是null,但接下來這個 String.valueOf()方法卻不管這些,其實這個方法也是調用了toString()方法,只不過在調用之前做了點處理,我們來看一下源碼:
/*** 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();}不看注釋,直接看代碼也知道,這個方法就是在調用 toString() 之前判斷一下這個對象是不是null,如果不是null,則正常調用其toString()方法,如果是null 的話,則返回字符串形式的null。
String.valueOf() 比起直接用 toString() 來說雖然可能會減少報錯的機會,但是如果在對比對象值的時候可要小心,要注意如果用if(String.valueOf(object)==null) 就肯定不行的了。
強制轉換 (String)data
這個是初學者最容易出錯的,其實每個對象的類型在對象創建的時候已經確定并且不能更改,所謂強制轉換也只是使其表面上換成了另一種類型,可以使用其方法對這個對象進行處理。那么可想而知,把物品A 當成物品B 來使用,當A 能能夠被當成 B的時候大家都相安無事,你走你的路,我過我的橋,一旦A 不能被當成B ,它不會去自動調用 toString()方法,而是馬上就會報錯。
例一:
Integer obj1 = new Integer(100); String strVal = (String)obj1; //Cannot cast from Integer to String因為obj1 在創建的時候就是 Integer 類型,不能轉換成 String 類型,所以在編譯期間就會報錯Cannot cast from Integer to String。
例二:
Object obj2 = new Integer(100); String strVal = (String)obj2;obj2 雖然本質上是 Integer 類型,但其表面上確是 Object 類型,所以在編譯的時候沒有報錯,但因為 obj2 在創建的時候已經確定了其在本質上 Integer 類型,所以這兩行代碼在運行時依然會報錯,因為 Integer 型不能轉換成 String 類型。
當然,如果要把 Integer 型轉換成 String,可以調用其 toString()方法:Integer.toString(obj1) 或者?String.valueOf(obj1); 對應于其他自定義類型,則調用自己重寫的 toString() 方法。
此外,因null值可以被強制轉換為任何類型,所以(String)null也是合法的。
參考資料
- Java API - Oracle Documentation
- java的基礎學習之(toString()、String.valueOf()、String強轉的區別)
- toString和 強轉(String)的區別?
?
轉載于:https://www.cnblogs.com/yuxiaoqi/p/3562161.html
總結
以上是生活随笔為你收集整理的toString() 和 强制类型转换 (String)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 质数表线性时间筛法
- 下一篇: 编程之美 set 1 不要被阶乘吓倒