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决定字符串将成为最后一个类否则,任何人都可以修改和更改字符串的值。希望这能帮点忙。
添加回答
举报