4 回答

TA貢獻1869條經驗 獲得超4個贊
str
String
String
"Hello"
"Help!"
String
str
final
:
final String STR = "Hello";
String
STR

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

TA貢獻1851條經驗 獲得超5個贊
讓我們把它分成幾個部分
String s1 = "hello";
此語句創建包含以下內容的字符串你好并占據記憶中的空間常串池并將其分配給引用對象。沙一
String s2 = s1;
此語句分配相同的字符串。你好到新的參考S2
__________
| |
s1 ---->| hello |<----- s2
|__________|
兩個引用都指向相同的字符串,因此輸出相同的值如下所示。
out.println(s1); // o/p: hello
out.println(s2); // o/p: hello
盡管弦是不變,則可以將任務分配到沙一將引用新值。堆疊.
s1 = "stack";
__________
| |
s1 ---->| stack |
|__________|
但是關于S2對象,該對象指向你好它將是真實的。
__________
| |
s2 ---->| hello |
|__________|
out.println(s1); // o/p: stack
out.println(s2); // o/p: hello
因為字符串是不可變的Java虛擬機不允許我們修改字符串S1用它的方法。它將創建池中的所有新字符串對象,如下所示。
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
注如果字符串是可變的,則輸出應該是
out.println(s1); // o/p: stack overflow
現在,您可能會感到奇怪,為什么String有這樣的方法:凹()修改。下面的片段將清除您的困惑。
s1 = s1.concat(" overflow");
在這里,我們將字符串的修改后的值賦值給沙一推薦信。
___________________
| |
s1 ---->| stack overflow |
|___________________|
out.println(s1); // o/p: stack overflow
out.println(s2); // o/p: hello
這就是為什么Java決定字符串將成為最后一個類否則,任何人都可以修改和更改字符串的值。希望這能幫點忙。
添加回答
舉報