Java 如果我可以更改字符串的值,字符串如何是不可变的?我知道我只是在更改参考,但为什么第一个场景不起作用?
考虑这两种情况- 情景1:Java 如果我可以更改字符串的值,字符串如何是不可变的?我知道我只是在更改参考,但为什么第一个场景不起作用?,java,Java,考虑这两种情况- 情景1: class S{ String s="hello"; s="world"; System.out.println(s); } public class StringImmutable{ public static void main(String args[]){ } Result-它在pkg.StringImmutable.main(StringImmutable.java:12)处抛出未编译的代码错误 但当我这么做的时候- c
class S{
String s="hello";
s="world";
System.out.println(s);
}
public class StringImmutable{
public static void main(String args[]){
}
Result-它在pkg.StringImmutable.main(StringImmutable.java:12)处抛出未编译的代码错误
但当我这么做的时候-
class S{
String s="hello";
void change(){
s="world";
System.out.println(s);
}
}
public class StringImmutable{
public static void main(String args[]){
S s=new S();
s.change();
}
}
结果-世界..它工作得很好
字符串如何不可变?请在此处输入代码您正在创建新字符串-不涉及任何变异。每次你想编辑一个字符串时(即
s1=s1+s2
,s1+=s2
,s1=s1)。子字符串(
…)都是创建一个新字符串,而不是突变
字符串在设计上是不可变的。您需要区分变量和对象。如果字符串是不可变的,则
s1=“hello”;s2=s1;s2.change();
也会更改s1。您所做的是将s更改为指向不同的字符串当您执行s=“world”
时,s
开始指向新的字符串对象(“世界”).“hello”
仍保留在内存中,稍后将进行GCD。@HussainAkhtarWahid'Ghouri':-我同意新用户可以像其他任何人一样进行谷歌搜索。“字符串不可变意味着什么”会产生足够多的结果。(不总是如此。赋值('=')不会创建新字符串。可能是RHS上的内容创建了新字符串。)起首部分…编辑了我的答案。