<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這就是頭條三面?可能嗎?

          共 2158字,需瀏覽 5分鐘

           ·

          2022-03-22 13:12

          最近看到這樣一個(gè)問題,說toString()、String.valueOf、(String)強(qiáng)轉(zhuǎn),有啥區(qū)別?重點(diǎn)是說,這是頭條三面?

          咱也不知道真的假的,那就分析分析這個(gè)問題吧!

          直觀分析

          首先我們看這三頭貨,什么toString()、String.valueOf、(String)強(qiáng)轉(zhuǎn)?有啥區(qū)別?就問你是不是很像,是不是都有一個(gè)String?

          說白了,這三個(gè)都是將XX給變成String,簡(jiǎn)稱變身String的方法

          接下來一個(gè)一個(gè)的分析下!

          toString()

          這個(gè)方法真正做到那種見名知意,也就是看到這個(gè)名字,我就知道它是干嘛的,所以平常咱們?cè)诿臅r(shí)候也要注意,你起的名字要有意義,看到這個(gè)名字我知道這個(gè)東西有什么用~

          別一上去就整個(gè):yydf

          6e9342e35ec857e11f5a38ba34aa724b.webp

          這啥玩意?你是要整個(gè)yyds,整個(gè)全世界最厲害的類,然后一不小心,手抖敲錯(cuò)字母了嗎?

          接著來看我們的toString,這玩意怎么用?

          Integer?a?=?666;??
          a.toString();

          我們應(yīng)該比較熟悉這種,就是在一些JavaBean中也就是我們的實(shí)體類或者pojo中:7fd3ebb55f562b394d5d7dec823a5f38.webp

          這里的toString其實(shí)是重寫了Objec類中的toString:

          18a3beaef277805dc5fd0712c6edd724.webp

          也即是說,如果你自己定義一個(gè)類,使用toString的話,那就是直接調(diào)用Objec類中的該方法了,但是一般我們都會(huì)重寫該方法,比如integer這個(gè)包裝類中:d6a59f49280c3005de184526a1e737f7.webp

          發(fā)現(xiàn)這里的toString就與Objec中的不一樣,進(jìn)行了重寫,我們可以這樣使用:

          Integer?a?=?666;??
          String?b?=?a.toString();

          因?yàn)樵贠bject中含有toString方法,又因?yàn)镺bject是所有類的父類,因此,所有的引用類型都可以使用toString方法,只不過大部分派生類都會(huì)重寫該方法!

          在Java中,數(shù)據(jù)分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,而基本類型是無法使用toString方法的:

          b459298595d63ad071fb949421705233.webp

          不過在使用toString的時(shí)候我們要注意一下null值的問題:

          e39ca9ec89292b400fa23ee130271876.webp

          比如這樣的情況,編譯是沒問題的,但是運(yùn)行就報(bào)錯(cuò)了:

          074acbbc98892c980cc437af5fc5b29d.webp

          所以這里一定要注意,不然就掉坑了!

          那對(duì)于toString這個(gè)方法,所有的引用類型都可以使用,大部分派生類會(huì)重寫,使用要注意null問題,不然就會(huì)遇到空指針異常!

          鑒于大部分人都是不認(rèn)真的,所以一般就不推薦使用該方法了,但是如果有些情況使用toString性價(jià)比更高的話,那就用唄,做人,不能太死板了!

          String.valueOf()

          該方法屬于String中的一個(gè)靜態(tài)方法,使用起來相對(duì)來說會(huì)方便點(diǎn),嗯,是這么回事:

          f461eaf2e509245ad5070dec1bd572fe.webp

          而且我們發(fā)現(xiàn),對(duì)于基本類型,這個(gè)方法也是可以進(jìn)行String的轉(zhuǎn)變的,我們可以看下它的源碼:

          efeb87573838d183f35ce60ab996a814.webp

          發(fā)現(xiàn)沒有,當(dāng)我們傳入的是一個(gè)基本類型的時(shí)候,實(shí)際上最終還是調(diào)用的toString:

          b5787c76315eebb8e6edbeb56b90c32b.webp

          我們發(fā)現(xiàn)在String當(dāng)中這是一個(gè)重載函數(shù),而且其中一個(gè)可以傳入Object作為參數(shù),這說明啥?

          也就意味著,啥玩意都可以往里面放,都可以幫助你轉(zhuǎn)變成String,我們?cè)囅拢?/p>53c9862192a7fd4b5c984fa141dbd7a8.webp

          輸出結(jié)果:

          a63e507a96e0845e2bc5031f123e85c8.webp

          再看下null值問題:

          7e673a1995099ff1288948d1983aa55e.webp

          輸出結(jié)果:

          131890e4a0b42f796bdaaa53d6bd0d29.webp

          發(fā)現(xiàn)沒有,并沒有給你報(bào)錯(cuò),而是給你返回了一個(gè)字符串“null”,看源碼:

          977530813be2eb845dc18cf9b3ee2646.webp

          原來這里是做了判空處理的,這個(gè)要比直接調(diào)用toString更加的安全了!

          總結(jié)來說,就是String.valueOf()方法不僅可以用于引用類型,也可以用于基本類型(實(shí)際調(diào)用的是其包裝類),不放實(shí)際上都是調(diào)用了toString方法,不過在以O(shè)bject為參數(shù)的方法中增加了盼空處理,避免了空指針異常!

          所以,一句話:

          String.valueOf()方法比toString()方法好用,推薦

          (String)強(qiáng)轉(zhuǎn)

          對(duì)于這種強(qiáng)轉(zhuǎn)形式,大家應(yīng)該對(duì)基本類型的強(qiáng)制轉(zhuǎn)換比較熟悉,見的也比較多,其實(shí)吧,在基本類型中進(jìn)行強(qiáng)制轉(zhuǎn)換還可以……

          但是吧,這個(gè)字符串強(qiáng)轉(zhuǎn)真不咋地,也不怎么推薦使用,你看:

          c8a712becb3c711456eb6b7bd82bd134.webp

          表面來看,想基本類型和引用類型都是無法進(jìn)行強(qiáng)轉(zhuǎn)的,不過對(duì)于Object類型在編譯的時(shí)候并沒有什么問題,但是,這可不代表運(yùn)行無錯(cuò)啊:

          fa131dacc901ced7fc02dbefed6df301.webp

          發(fā)現(xiàn)會(huì)報(bào)一個(gè)類型轉(zhuǎn)換錯(cuò)誤,也就是無法轉(zhuǎn)換,不過對(duì)于null值問題:

          8e80a792037648814db7d66dd5170b20.webp

          發(fā)現(xiàn)這個(gè)對(duì)于null是可以強(qiáng)轉(zhuǎn)的,一般在使用這個(gè)強(qiáng)轉(zhuǎn)的時(shí)候,我們可以這樣:

          bf688913d365ab9c416df10e361d6b5e.webp

          看下結(jié)果:

          3a17a93c3037e93d89de6e71b285c9d8.webp

          是不是更加友好,避免報(bào)錯(cuò),所以在使用強(qiáng)轉(zhuǎn)的時(shí)候,我們可以使用instanceof來進(jìn)行類型檢查,得到一個(gè)更加友好的提示!

          不過,一般來說,還是不太推薦使用強(qiáng)轉(zhuǎn),就沖這名字,它就不太靠譜,你覺得呢?

          +“”

          這是啥呢?看:

          13285465eecedf3944a67e10c7acb6ff.webp

          運(yùn)行也是沒錯(cuò)的:

          291edfbe68c0976a43eea12759d0b22c.webp

          這種方式用過嗎?

          其實(shí)這種方式就相當(dāng)于字符串直接拼接,對(duì)于這種形式我們可以反編譯一個(gè)代碼看看:

          b98128535660a85e55b58f383d6ae445.webp


          其實(shí)也就是先創(chuàng)建一個(gè)StringBuilder,然后通過append的方式拼接兩個(gè)變量,最后在調(diào)用toString的方式!

          對(duì)于這種方式,其實(shí)是不太建議的,因?yàn)樗男什惶校簿褪遣唤ㄗh直接拼接字符串的!

          OK,如果你對(duì)字符串拼接比較感興趣,可以私下自行研究下,今天的分享就到這里了!

          可以說下,你都是使用哪種方式呢?

          end


          精品資源,超多福利加微信免費(fèi)領(lǐng)取


          長(zhǎng)安添加下方·二維碼

          領(lǐng)取慶哥的編程自學(xué)秘籍PDF電子書),朋友圈每天更新

          常駐小尾巴


          往期精彩推薦

          6a21f9d618faa5caaa234eb8c778e30a.webp

          我已經(jīng)不用 try catch 處理異常!太辣雞了!


          23c8e4dff5197393723c35563fa28dc8.webp

          typora最佳替代品


          fb68ece15cb42ba3d0323657f1182de4.webp

          聊聊編程學(xué)習(xí)的方式,途徑

          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最黄色视频久久 | 欧美操逼高清视频 | 亚洲AV无码国产成人久久 | 人妻精品久久 | 亚洲欧洲日韩在线蜜桃 |