4 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個贊
str
String
String
"Hello"
"Help!"
String
str
final
:
final String STR = "Hello";
String
STR

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊
String str = new String();
str
new String()
""
).
str --- > ""
str = "Hello";
str
""
.
str -+ "" +-> "Hello"
str = "Help!";
str
""
str -+ "" | "Hello" +-> "Help!"

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)忙。
添加回答
舉報