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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

欲练神功必先自宫,String 自宫后“不可变性”到底有啥好处?

發布時間:2024/3/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 欲练神功必先自宫,String 自宫后“不可变性”到底有啥好处? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“業余草”,選擇“置頂公眾號”

第一時間獲取技術干貨和業界資訊!

?

?

這個標題我想了很久,沒想到太吸引人的標題,于是就拍腦袋決定用這個標題了。大家湊合著看吧!

接上篇文章《String 的“不可變性”是因為 final?請別再錯下去了!》我們再來說說 Java 為什么要讓 String 設計成不可變的?

任何事情都得有原因吧,Java 設計 String 也不是拍腦袋干的。而是經過精密設計和思考得來的。

為了搞清這個問題,我們先來看一個例子。

這個例子,我們的本意是,a ?= b = c = “test”,最終輸出的結果期望是:testA、testB、testC。我們的本意是希望變量是不變的。

好了,現在的輸出結果超出預期。全亂了,不可控了。所以 String 不可變的安全性就體現在這里。實際上 StringBuffer 的作用就是起到了 String 的可變配套類角色。這個例子,我們的本意是,a ?= b = c = “test”,最終輸出的結果期望是:testA、testB、testC。我們的本意是希望變量是不變的。

這只是一個非常簡單的場景,其它的還有 HashSet、HashMap、多線程場景,那就更亂了,更不可控了,更不安全了。

想象一下,如果你的 HashSet 搞成上面這樣的,會出現什么后果?

真要設計成這樣,Java 都要完全被你顛覆。

不可變性在線程安全方面的作用,我就不說了。我們再來看另外一個點:字符串常量池。

假設現在有下面兩個變量:

那么它們在內存中,就是這樣的:

這樣在大量使用字符串的情況下,可以節省內存空間,提高效率。如果要是可變的,完了,變量 one 和 two 得一個人占一點內存。那誰用 Java 誰倒霉,這么浪費內存的誰還會用?Java 將不再是 java。

所以,要想節約一些內存。String 的不可變性就是一個最基本的必要條件。

參考資料

  • Java 為什么要讓 String 設計成不可變的?
  • Java 中 String 為什么設計成 final 類?為什么它有“不可變性”?

10T技術資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,GO等等。在公眾號內回復對應關鍵字或框架名字,即可免費獲取!!

?你再主動一點點???我們就有故事了

總結

以上是生活随笔為你收集整理的欲练神功必先自宫,String 自宫后“不可变性”到底有啥好处?的全部內容,希望文章能夠幫你解決所遇到的問題。

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