第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中字符串的不可變性

Java中字符串的不可變性

守候你守候我 2019-06-03 16:33:38
Java中字符串的不可變性考慮下面的例子。String str = new String();str  = "Hello";System.out.println(str);  //Prints Hellostr = "Help!";System.out.println(str);   //Prints Help!現(xiàn)在,在Java中,字符串對象是不可變的。那為什么這個物體str可以被分配值“幫助!”。這不是與Java中字符串的不可變性相矛盾嗎?有人能解釋一下不變性的確切概念嗎?編輯:好的。我現(xiàn)在明白了,但只有一個后續(xù)問題。那么下面的代碼呢?String str = "Mississippi"; System.out.println(str); // prints Mississippi str = str.replace("i", "!"); System.out.println(str);  // prints M!ss!ss!pp!這是否意味著再次創(chuàng)建兩個對象(“密西西比”和“M!SS!PP!”)以及參考str指向后面的另一個對象。replace()方法?
查看完整描述

4 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個贊

對象str引用可以更改,但實(shí)際String物體本身不能。

這個String包含字符串的"Hello""Help!"無法改變它們的價值,因此它們是不可變的。

不變性String對象并不意味著指向?qū)ο蟮囊貌荒芨摹?/trans>

有一種方法可以防止str更改引用就是將其聲明為final:

final String STR = "Hello";

現(xiàn)在,試圖分配另一個StringSTR將導(dǎo)致編譯錯誤。


查看完整回答
反對 回復(fù) 2019-06-03
?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

輕巧的手柄,我建議你讀一讀杯大小-一個關(guān)于變量的故事請按值傳遞(杯號續(xù))..這對閱讀上面的帖子有很大幫助。

你讀過嗎?是。好的。

String str = new String();

這將創(chuàng)建一個名為“遠(yuǎn)程控制”的新“遠(yuǎn)程控制”。str“并將其設(shè)置為new String()(或"").

例如,在內(nèi)存中,這會產(chǎn)生:

str --- > ""

str  = "Hello";

這就改變了遙控器“str“但不修改原始字符串。"".

例如,在內(nèi)存中,這會產(chǎn)生:

str -+   ""
     +-> "Hello"

str = "Help!";

這就改變了遙控器“str“但不修改原始字符串。""或遙控器當(dāng)前指向的對象。

例如,在內(nèi)存中,這會產(chǎn)生:

str -+   ""
     |   "Hello"
     +-> "Help!"


查看完整回答
反對 回復(fù) 2019-06-03
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個贊


讓我們把它分成幾個部分


String s1 = "hello";

此語句創(chuàng)建包含以下內(nèi)容的字符串你好并占據(jù)記憶中的空間常串池并將其分配給引用對象。沙一


String s2 = s1;

此語句分配相同的字符串。你好到新的參考S2


         __________

        |          |

s1 ---->|  hello   |<----- s2

        |__________| 

兩個引用都指向相同的字符串,因此輸出相同的值如下所示。


out.println(s1);    // o/p: hello

out.println(s2);    // o/p: hello

盡管弦是不變,則可以將任務(wù)分配到沙一將引用新值。堆疊.


s1 = "stack";    

         __________

        |          |

s1 ---->|  stack   |

        |__________|

但是關(guān)于S2對象,該對象指向你好它將是真實(shí)的。


         __________

        |          |

s2 ---->|  hello   |

        |__________|


out.println(s1);    // o/p: stack

out.println(s2);    // o/p: hello

因?yàn)樽址遣豢勺兊腏ava虛擬機(jī)不允許我們修改字符串S1用它的方法。它將創(chuàng)建池中的所有新字符串對象,如下所示。


s1.concat(" overflow");


                 ___________________

                |                   |

s1.concat ----> |  stack overflow   |

                |___________________|


out.println(s1);    // o/p: stack

out.println(s2);    // o/p: hello

out.println(s1.concat); // o/p: stack overflow

注如果字符串是可變的,則輸出應(yīng)該是


out.println(s1);    // o/p: stack overflow

現(xiàn)在,您可能會感到奇怪,為什么String有這樣的方法:凹()修改。下面的片段將清除您的困惑。


s1 = s1.concat(" overflow");

在這里,我們將字符串的修改后的值賦值給沙一推薦信。


         ___________________

        |                   |

s1 ---->|  stack overflow   |

        |___________________|



out.println(s1);    // o/p: stack overflow

out.println(s2);    // o/p: hello

這就是為什么Java決定字符串將成為最后一個類否則,任何人都可以修改和更改字符串的值。希望這能幫點(diǎn)忙。


查看完整回答
反對 回復(fù) 2019-06-03
  • 4 回答
  • 0 關(guān)注
  • 544 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號