重新分配java参数时

时间:2018-01-05 16:29:38

标签: java

public void method1 (String a)
{
   a = a + "xyz";
   method2 (a);
}

对于哪个“a”传递给method2 - 原始参数还是新的本地版本,是否存在歧义?

2 个答案:

答案 0 :(得分:1)

""是引用的变量名,在您更改引用以引用新对象的方法中,因此当您调用method2时,它会复制新引用。下面的一些基本插图。

 method1Caller(){
   a1 ---> "s"
   method(a1) // copies a1 reference
 }

 method(a1){ //a1 points to "s" at this point
 a = a + "xyz"; //changing reference
 a ---> "sxyz"
 method2(a); // copies a which reference "sxyz"
 }

请注意" a"在method1Caller中仍将指向原始对象。

答案 1 :(得分:0)

  

对于哪个“a”传递给method2

有任何歧义

没有歧义。 a中只有一个字符串method1的实例。

  

原始参数或新的本地版本?

字符串a将附加“xyz”以形成新的String对象,并将其传递给method2

您的代码基本类似于:

public void method1 (String a)
{
   method2 (a+"xyz");
}

字符串是不可变的,因此您可以确保传递给method1的“原始”字符串不会受到影响。