日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

toString() 和 强制类型转换 (String)

發布時間:2024/4/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。