public static void main(String[] args)
{
String name = "john";
StringTest obj = new StringTest(name);
name = "peter";
System.out.println(obj.name);
}
}
class StringTest{
String name;
StringTest(String name)
{
this.name = name;
}
}
现在,由于字符串名称已从“john”重新分配为“peter”,我希望它能打印peter但它会打印出john。字符串是不可变的导致在重新分配时创建一个新对象或者对此有什么正确的解释?
此外,当我尝试使用Integer对象时,行为是一样的!任何人请解释这种行为的原因
答案 0 :(得分:2)
Java使用按值传递,这意味着您传递的值为name
,而不是参考号。
在您创建name
实例后更改StringTest
的值不会以任何方式影响您的StringTest
。
答案 1 :(得分:0)
我认为在这里抛出的是你不必使用“new”关键字来创建字符串。代码更像是创建一个原始类型,如int或long而不是创建对象。这是实际发生的事情。 创建两个字符串的等效方法是
String name = new String(new char[] {'j','o','h','n'});
StringTest obj = new StringTest(name);
name = new String(new char[] {'p','e','t','e','r'});
这样编写我认为为什么你没有对StringTest中引用的字符串产生副作用更清楚。它与字符串确实不可变的事实无关。