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)文章
MyBatis-Plus與Druid結(jié)合Dynamic-datasource實(shí)現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例
Dynamic-DataSource 可以和絕大多是連接層插件搭配使用,比如:mybatis,mybatis-plus,hibernate等,本文就來介紹一下MyBatis-Plus與Druid結(jié)合Dynamic-datasource實(shí)現(xiàn)多數(shù)據(jù)源操作數(shù)據(jù)庫的示例,感興趣的可以了解一下2023-10-10
Java微服務(wù)架構(gòu)中的關(guān)鍵技術(shù)和設(shè)計原則解讀
Java是一種面向?qū)ο蟮母呒壘幊陶Z言,具有跨平臺兼容性、自動內(nèi)存管理等特點(diǎn),它支持多線程、異常處理,并擁有豐富的標(biāo)準(zhǔn)庫和強(qiáng)大的社區(qū)生態(tài),微服務(wù)架構(gòu)是將應(yīng)用分解為多個小型服務(wù)的設(shè)計風(fēng)格2024-11-11
Java SPI機(jī)制原理與實(shí)戰(zhàn)技巧
這段文章深入解析了JavaSPI機(jī)制原理與實(shí)戰(zhàn),涵蓋基本原理、代碼實(shí)戰(zhàn)及優(yōu)化方案,重點(diǎn)介紹了資源管理、異常處理、日志規(guī)范和單元測試的最佳實(shí)踐,助你寫出高質(zhì)量代碼,感興趣的朋友一起看看吧2026-06-06
mybatis?<foreach>標(biāo)簽動態(tài)增刪改查方式
這篇文章主要介紹了mybatis?<foreach>標(biāo)簽動態(tài)增刪改查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
部署SpringBoot項(xiàng)目到Linux服務(wù)器數(shù)據(jù)盤的完整流程
這篇文章講述了如何在Linux服務(wù)器上掛載數(shù)據(jù)盤并部署SpringBoot項(xiàng)目,具體步驟包括查看磁盤狀態(tài)、分區(qū)與格式化、掛載分區(qū)、配置開機(jī)自動掛載等,以及上傳項(xiàng)目文件、編寫啟動腳本、啟動項(xiàng)目并測試、配置Systemd服務(wù)管理,需要的朋友可以參考下2025-11-11

