jdk9為何要將String的底層實現由char 改成了byte

時間 2021-05-05 16:07:04

1樓:快樂領讀

因為char是UTF-16。有2個位元組。所以string很多的話,記憶體就會占用很大。

為了節約記憶體就用byte。用byte之後,如果你的字串都是ASCII的話,就會比utf-16的char小一倍。

2樓:pansz

這是為了實現更高效率的儲存,修改後的方案已經接近gb2312了。

簡要的說原先的方案是utf16,漢字是兩位元組,英文還是兩位元組。

修改後的jdk9方案,漢字是兩位元組,純英文是一位元組。

作為參考,utf-8方案則是漢字為三位元組,英文為一位元組。

咱們自己的gb2312方案是漢字是兩位元組,英文是一位元組。

從效率上說,如果主要用到的是中文跟英文本元,那麼無論utf8還是utf16都比不上gb,而jdk9的新方案竟然可以達到比兩個utf方案空間占用都小,大部分場合接近gb2312效率,顯然儲存空間占用更低,是乙個不錯的優化。

3樓:鏢掌櫃

jdk的底層實現改變無非就是為了追求以下兩點更快的執行效率

更少的資源占用

將String的底層實現由char改成了byte屬於後者至於為什麼

我看見回覆區已有更詳細的回答

就不再班門弄虎了

4樓:匯智動力IT學院

其實本來String構造方法有把位元組陣列轉換為字串的,1.9底層預設改為byte實現目的應該是位元組流比較的通用所有資料都可以變成位元組進行操作,底層在操作字串和流轉換的時候也比較方便.

5樓:陳林熙

多謝提醒,不過在需要效能的場合我是用的自己實現的AStr,和Str.

大多數不需要效能的場合我還是用的String,方便.

父母既然不相愛,為何要結婚,為何要將這種不幸福帶給孩子?

小狗蜥蜴 有一部分人是為了傳宗接代才結婚,可以參考以前的童養媳。有人結婚的時候才知道新娘是誰。有一部分人是本來相愛的。有的家長為了維持家庭表面的完整,沒有離婚。如果他們知道孩子不幸福,估計會考慮離婚吧。 tony 很多父母都不怎麼愛,或者根本不愛。因為事實上對於多數人,婚姻首先是經濟同盟,感情是婚姻...

為何各家2470要將長焦端定在70mm?

李楠 這個主要是光學的限制。鏡頭本身是光學的技術,幾百年來進展很慢 非球面已經算是非常了不起的技術爆發了,之後幾乎沒有同等級別的了 當然,在確定的技術下,底片 數碼時代的 cmos 大小確定的情況下,理論上我們可以做出10 1000 的光圈 0.95 的超級變焦頭。但是這顆鏡頭的口徑,會非常之大 估...

為何部分知乎群眾要將仇男 女尊 女利等非女權主義者稱之為女權或「田園女權」呢?

首先我要說誰都是利己主義者,誰都想從婚姻中獲得好處,婚姻是個合作專案,對於有資產的男人來說,田園女權不足畏懼,人類歷史由來,女性就是會選擇能給她物質好處的男人結婚,無可厚非,那怎麼搞得底層男性一副怨氣樣呢,就是因為女性不想降低生活質量去伺候底層男性為繁殖基因,底層男性對於想輕而易舉獲得乙個後代想的發...