大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線(xiàn):400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java中的字符串不可變的的原因有哪些

Java中的字符串不可變的的原因有哪些

更新時(shí)間:2019-09-03 17:11:53 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2683次

  

在java里String是不可變的。一個(gè)不可變的對(duì)象是一個(gè)簡(jiǎn)單的類(lèi),它的實(shí)例不會(huì)被修改。當(dāng)一個(gè)不可變的類(lèi)的實(shí)例被創(chuàng)建時(shí),所有的信息已經(jīng)在實(shí)例中被初始化了,而且這些信息不能被修改。 不可變的類(lèi)有很多優(yōu)勢(shì)。本文動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編分享Java中的字符串不可變的的原因有哪些,分別從內(nèi)存,同步和數(shù)據(jù)結(jié)構(gòu)三個(gè)方面進(jìn)行了說(shuō)明。


1、字符串池


  字符串池是方法區(qū)中的一個(gè)特殊存儲(chǔ)區(qū)。當(dāng)一個(gè)字符串被創(chuàng)建的時(shí)候,如果字符串池中已經(jīng)存在這個(gè)字符串值,就直接返回已存在字符串的引用,否則,就創(chuàng)建一個(gè)新的字符串到字符串池中。


  下面代碼將只會(huì)在堆中創(chuàng)建一個(gè)字符串對(duì)象:


String string1 = "abcd";

String string2 = "abcd";

2.png

java-string-pool.jpeg


  如果字符串是可變的,改變引用的字符串將會(huì)導(dǎo)致其他引用此字符串是錯(cuò)誤的。



  2、緩存Hashcode


  在java中經(jīng)常使用字符串的哈希碼。例如:在HashMap 或HashSet 中,字符串的不可變性,保證了哈希碼是一致的,從而不必?fù)?dān)心哈希碼會(huì)改變。這意味著,每次使用哈希碼都不必重新計(jì)算一次。這樣,會(huì)更加高效。


  在String類(lèi)中,有如下代碼:


private int hash;//this is used to cache hash code.


  以上代碼中hash變量中就保存了一個(gè)String對(duì)象的hashcode,因?yàn)镾tring類(lèi)不可變,所以一旦對(duì)象被創(chuàng)建,該hash值也無(wú)法改變。所以,每次想要使用該對(duì)象的hashcode的時(shí)候,直接返回即可



  3、使其他類(lèi)的使用更加方便


  為了說(shuō)明這一點(diǎn),請(qǐng)看以下代碼:


HashSetset = new HashSet();

set.add(new String("a"));

set.add(new String("b"));

set.add(new String("c"));


for(String a: set)

      a.value = "a";


  在這個(gè)例子中,如果String是可變的,它的值改變將會(huì)違反set的設(shè)計(jì)(set中包含了不重復(fù)的元素)。當(dāng)然,以上代碼僅僅是個(gè)演示,實(shí)際String類(lèi)中,并沒(méi)有value字段。



  4、安全


  在許多java類(lèi)中,字符串被廣泛使用為參數(shù)。比如:網(wǎng)絡(luò)連接,打開(kāi)文件等。如果字符串是可變的,則一個(gè)連接或文件將被更改,這可能會(huì)導(dǎo)致嚴(yán)重的安全威脅。該方法認(rèn)為它連接到一臺(tái)機(jī)器,但可能并沒(méi)有。可變的字符串可能在反射中也會(huì)造成安全問(wèn)題,因?yàn)樗膮?shù)是字符串。


  代碼示例:


boolean connect(string s){

    if (!isSecure(s)) { 

    throw new SecurityException(); 

    }

        //here will cause problem, if s is changed before this by     using other references.    

        causeProblem(s);

}


  5、不可變的對(duì)象,自然是線(xiàn)性安全的


  因?yàn)椴豢勺儗?duì)象不能被更改,因此可以在多個(gè)線(xiàn)程之間自由共享。不需要任何同步處理。


  總之,把字符串設(shè)計(jì)成不可變的,主要目的是為了高效和安全。這也是為什么許多情況下更偏愛(ài)選擇不可變的類(lèi)的原因。


以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“ Java中的字符串不可變的的原因有哪些”的內(nèi)容,希望能夠幫助到大家,更多精彩內(nèi)容請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


相關(guān)免費(fèi)視頻教程推薦


JAVA可變字符串視頻教程下載:http://www.dabaquan.cn/xiazai/2513.html



提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久青草国产在线视频亚瑟影视 | 香蕉视频国产精品 | 久久成人免费观看全部免费 | 四虎精品永久在线 | 国产成人午夜片在线观看 | 久久国产精品伦理 | 欧美日本一道免费一区三区 | 国产日本久久久久久久久婷婷 | 2021国产在线视频 | 毛片一区二区三区 | 久久99精品久久久久久臀蜜桃 | 成人短视频在线观看免费 | 日韩大片 | 在线欧洲成人免费视频 | 亚洲欧美日韩国产精品久久 | 免费观看成人久久网免费观看 | 国产精品国产三级国产无毒 | 91福利国产在线观看 | 午夜影院一级片 | 色综合a | 九色九色九色在线综合888 | 久久精品店 | 免费看欧美日韩一区二区三区 | 伊人久久狼人 | 成人在线午夜 | 久久手机在线视频 | 国产成人精品天堂 | 97高清国语自产拍 | 久久99中文字幕久久 | 大乳女做爰中文字幕 | 亚洲国产日产韩国欧美综合 | 国产免费久久精品99 | 欧美jizzhd精品欧美另类 | 国产视频精品视频 | 狠狠色噜噜狠狠狠狠97影音先锋 | 日韩一区二区三区免费视频 | 国产第一福利 | 亚洲爱婷婷色婷婷五月 | 久久日韩在线 | 在线 中文字幕 日韩 欧美 | 婷婷综合五月中文字幕欧美 |