Java 修改String/Integer对象并检查它是否影响以该对象为参数的类对象

Java 修改String/Integer对象并检查它是否影响以该对象为参数的类对象,java,string,object,assignment-operator,Java,String,Object,Assignment Operator,} } 现在,由于字符串名称已从“john”重新指定为“peter”,我希望它打印peter,但它打印john。字符串不可变是否会导致在重新分配它时创建新对象,或者对此的正确解释是什么 当我尝试使用Integer对象时,行为也是一样的!任何人请解释这种行为的原因Java使用传递值,这意味着您传递的是name的值,而不是引用。 在您已经创建了StringTest实例之后更改name的值不会以任何方式影响您的StringTest。我认为让您感到困惑的是,您不必使用“new”关键字来创建字符串。代码读

}

}

现在,由于字符串名称已从“john”重新指定为“peter”,我希望它打印peter,但它打印john。字符串不可变是否会导致在重新分配它时创建新对象,或者对此的正确解释是什么

当我尝试使用Integer对象时,行为也是一样的!任何人请解释这种行为的原因

Java使用传递值,这意味着您传递的是
name
的值,而不是引用。

在您已经创建了
StringTest
实例之后更改
name
的值不会以任何方式影响您的
StringTest

我认为让您感到困惑的是,您不必使用“new”关键字来创建字符串。代码读起来更像是创建int或long之类的基本类型,而不是创建对象。这就是实际发生的事情。 创建这两个字符串的等效方法是

class StringTest{
String name;
StringTest(String name)
{
    this.name = name;
}

以这种方式编写,我认为更清楚的是,为什么不能对StringTest中引用的字符串产生副作用。这与字符串确实是不可变的这一事实无关。

Ya因此对字符串名称的引用的副本将传递给该方法。。因此,一旦我更改了字符串名称,它应该会反映在具有引用的对象中,对吧!不,当你写
name=“peter”
,创建一个新的
字符串
,并将
名称
指向该
字符串
。这不会影响
StringTest
实例中的类变量
name
,它仍然会指向
“john”
。好的,知道了..tq。我只是觉得应该传递引用而不是实际引用string@sarish引用已传递,但当您分配新字符串时,变量将包含对该字符串的新引用,旧引用将不受影响。
class StringTest{
String name;
StringTest(String name)
{
    this.name = name;
}
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'});