亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

分析Java中為什么String不可變

瀏覽:46日期:2022-08-11 10:01:56
目錄常量池便利安全引申問題String在Java中的【引用傳遞】常量池

Java中我們創建String對象有兩種基本方法。

String str1 = 'zxhtom';String str2 = new String('zxhtom');

上面兩種方式我們創建了兩個String變量 。 但是第一種通過雙引號創建的zxhtom這個對象我們稱之為常量 。 在JVM中是存儲在一塊叫【常量池】中的。而第二種str2是我們稱之為普通變量。new一次就在JVM中開辟一塊內存。

【常量池】的作用就是復用,當同樣的內容再次被通過常量方式創建的時候Java會指向同一塊地址。通過如下代碼理解:

String z1 = 'zxhtom';String z2 = 'zxhtom';

分析Java中為什么String不可變

通過上圖我們可以了解 z1 , z2兩個變量其實引用的是同一內存地址 。 所以z1==z2 為true .

到這里引發出為什么String被設計為不可變 。 上列中z1 被修改成zxh . 如果String是可變得那么z2就會被莫名其妙修改成zxh .

便利

在Java中判斷兩個對象相等時通過地址判斷。但是地址被抽象話為一段hash函數。在Java使用中hash是經常被使用的。將String設置為不可變性那么hash就可以一直使用下去。不需要重新計算體現了便捷性

安全

仍是上面的情況 , z2會被不知情的情況下被修改了。這在多線程中很常見。我們在使用的時候會被其他情況將數據更改。這樣我們的數據將會失去了準確性。

引申問題

在上部中我們提到String的常量池。針對常量池引發思考 【String.intern()】

該方法的功能就是擴充【常量池】。z2.intern() 表示判斷常量池中是否存在與該值相同的對象如果有則返回該對象的引用。 如果沒有則將該值注冊到內存中。注意這里并不是將z2對象注冊過去。而是將z2的值注冊進去。

String z1=new String('zxhtom');String z2=z1.intern();System.out.println( z1==z1.intern() );System.out.println( z1.hashCode()+' '+z2.hashCode() );System.out.println( z2==z1 );System.out.println( z2==z1.intern() );

輸出結構

false

-688175064 -688175064

false

true

分析一下輸出結果不難發現,z1.intern()是常量池中沒有zxhtom,會將zxhtom值創建到常量池中,z2就是引用常量池中的引用。這個時候z1==z2 為false說明注冊到常量池中的并不是z1的地址,而是相當于z1的一個對象拷貝。

string創建方式的確定簡單歸結:

通過雙引號創建的 == 常量創建 通過常量拼接 == 常量創建 通過非常量與常量拼接 = 非常量創建 通過new 創建 == 非常量創建String在Java中的【引用傳遞】

在Java中方法參數傳遞都是通過值傳遞的。但是為什么String給我們的感覺是引用傳遞的呢?

public static void main(String[] args) {String x = new String('ab');change(x);System.out.println(x);} public static void change(String x) {x = 'cd';}

String不是基本對象所以String是引用傳遞。但是這里的引用傳遞知識傳遞String引用的地址 .當執行x=cd是原來ab的對象還在JVM中。外部x的引用地址沒有變 。 變得知識change方法中x的指向。所以外部打印的還是ab

以上就是分析Java中為什么String不可變的詳細內容,更多關于Java中為什么String不可變的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 伊人色婷婷综在合线亚洲 | 国产人va在线 | 狂野猛交xxxx吃奶 | 99久免费精品视频在线观看2 | 国产日韩在线看 | 二级黄绝大片中国免费视频0 | 日韩免费一区二区三区在线 | 亚洲欧洲视频 | 亚洲国产情侣 | 黄色免费一级视频 | 性色xxx视频 | 色婷婷亚洲精品综合影院 | 亚洲一区二区日韩欧美gif | 毛片在线播放观看日本 | 一级特黄性色生活片 | 女人精69xxxxx免费视频 | 国产小视频免费在线观看 | 久久精品久久久久久久久人 | 亚洲毛片在线播放 | 激情影院在线视频永久观看 | 影音先锋5566av资源网 | 日本免费网站 | 亚洲精品在线免费观看视频 | 国产手机在线国内精品 | 一级做a爰视频免费观看2019 | 午夜激情福利 | 可以免费看黄的网址 | 亚洲一区二区三区成人 | 青青青国产观看免费视频 | 国产自产自拍 | 精品国产一区二区三区不卡在线 | 999zyz色资源站在线观看 | 国产精品成人免费福利 | 美女黄色在线网站大全 | 欧美一级毛片无遮 | 国产精品入口麻豆免费 | 麻豆网站在线看 | 久久青草免费免费91线频观看 | 一级黄色免费片 | 在线观看 亚洲 | 青青草国产精品久久久久 |