java中toString()、String.valueOf()、(String)?強(qiáng)轉(zhuǎn)的區(qū)別
在實(shí)際開發(fā)中,少不了使用這三種方法對某一個類型的數(shù)據(jù)進(jìn)行轉(zhuǎn) String 的操作,那么什么情況下使用哪種方法更快捷,以及這些方法使用時的一些注意事項(xiàng)都有哪些呢?來敘述一下這三種方法的使用場景。廢話少說,直接上代碼!
一、基本類型轉(zhuǎn)換
1.toString()
基本類型是沒有 toString() 方法的
2.String.valueOf()
基本類型轉(zhuǎn) String 類型時,推薦使用 String.valueOf() 方法。
可以看到,基本上所有的基本類型都可以使用 String.valueOf() 方法去轉(zhuǎn)換為 String 類型。
3.(String) 強(qiáng)轉(zhuǎn)
一般情況下,不推薦使用強(qiáng)轉(zhuǎn)的方法去將某一類型轉(zhuǎn)換為 String 類型。
代碼會提示類型錯誤的。(String) 是標(biāo)準(zhǔn)的類型轉(zhuǎn)換,可將 Object 類型轉(zhuǎn)為 String 類型,使用(String) 方法進(jìn)行強(qiáng)轉(zhuǎn)時,最好使用 instanceof 做一個類型檢查,以判斷是否可以進(jìn)行強(qiáng)轉(zhuǎn),否則容易拋出 ClassCastException 異常。需要注意的是編寫的時候,編譯器并不會提示有語法錯誤,所以這個方法要謹(jǐn)慎的使用。
使用 instanceOf 與不使用 instanceOf 對比:
當(dāng)待轉(zhuǎn)換數(shù)據(jù)的類型為 Integer 時,使用 (String) 方法強(qiáng)轉(zhuǎn)會報錯,所以一般情況下能使用 String.valueOf() 方法進(jìn)行轉(zhuǎn)換的,就不推薦使用 (String) 方法強(qiáng)轉(zhuǎn)。
二、包裝類型轉(zhuǎn)換
1.toString()
包裝類型時可以使用 toString() 方法去成功轉(zhuǎn)換為 String 類型的。
2.String.valueOf()
包裝類型也是可以使用 String.valueOf() 方法去轉(zhuǎn)換為 String 類型的。
3.(String) 強(qiáng)轉(zhuǎn)
包裝類型的強(qiáng)轉(zhuǎn)和基本類型的強(qiáng)轉(zhuǎn)一樣,都會報錯的,這也是各種大佬不使用 (String) 去進(jìn)行強(qiáng)轉(zhuǎn)的原因
三、null 值問題
1.toString() 會報空指針異常
對 null 值進(jìn)行 toString() 轉(zhuǎn)換時,會報空指針異常。
2.String.valueOf() 會轉(zhuǎn)換為 "null" 字符串
注意,不是 null 值,而是 "null" 字符串。
3.(String) 強(qiáng)轉(zhuǎn)成功
注意使用強(qiáng)轉(zhuǎn)的方法去轉(zhuǎn)換 null 值與使用 String.valueOf() 方法去轉(zhuǎn)換 null 的區(qū)別,強(qiáng)轉(zhuǎn)返回 null 值,String.valueOf() 方法會返回 "null" 字符串。
這是因?yàn)?String.valueOf() 的源碼就是這么轉(zhuǎn)換的
總結(jié)一下就是:
1、toString(),可能會拋空指針異常
在這種使用方法中,因?yàn)?java.lang.Object 類里已有 public String toString() 方法,所以 java 對象都可以調(diào)用此方法。但在使用時要注意,必須保證 object 不是 null 值,否則將拋出NullPointerException 空指針異常。采用這種方法時,通常派生類會覆蓋 object 里的 toString() 方法。
2、String.valueOf(),建議使用,返回字符串 "null"
String.valueOf() 不會出現(xiàn)空指針異常,而且是靜態(tài)的方法,直接通過 String 調(diào)用即可,只是有一點(diǎn)需要注意,就是上面提到的,如果為 null,String.valueOf() 返回結(jié)果是字符串 "null",而不是null,這就要求如果需要對String.valueOf() 方法轉(zhuǎn)換之后字符串進(jìn)行判空等邏輯除了里的時候,一定要注意 "null"。
3、(String) 強(qiáng)轉(zhuǎn),不建議使用
(String)是標(biāo)準(zhǔn)的類型轉(zhuǎn)換,將 Object 類型轉(zhuǎn)為 String 類型,使用 (String) 強(qiáng)轉(zhuǎn)時,最好使用 instanceof 做一個類型檢查,以判斷是否可以進(jìn)行強(qiáng)轉(zhuǎn),否則容易拋出 ClassCastException 轉(zhuǎn)換異常。如果確需使用,還請謹(jǐn)慎為好!
到此這篇關(guān)于java中toString()、String.valueOf()、(String) 強(qiáng)轉(zhuǎn)的區(qū)別的文章就介紹到這了,更多相關(guān)toString()、String.valueOf()、(String) 強(qiáng)轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程詳解
這篇文章主要介紹了Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程,連續(xù)結(jié)構(gòu)和跳轉(zhuǎn)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中常見的兩種基本數(shù)據(jù)結(jié)構(gòu),而我們本次的主角棧和隊(duì)列都 既可以使用使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)也可以使用連續(xù)結(jié)構(gòu)實(shí)現(xiàn)2023-04-04Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)
java中截取字符串的常用方法是使用String類的substring方法,本文通過實(shí)例代碼給大家介紹Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧2024-12-12SpringBoot系列教程之dubbo和Zookeeper集成方法
這篇文章主要介紹了SpringBoot系列教程之dubbo和Zookeeper集成方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Java使用JDK與Cglib動態(tài)代理技術(shù)統(tǒng)一管理日志記錄
這篇文章主要介紹了Java使用JDK與Cglib動態(tài)代理技術(shù)統(tǒng)一管理日志記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Mybatis聯(lián)合查詢的實(shí)現(xiàn)方法
本文主要介紹了 Mybatis聯(lián)合查詢的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01