有人可以解释为什么我的预期和实际结果会有所不同。
我已经浏览过各个网站的其他帖子(包括stackoverflow),但答案并不明确。
public class Test
{
List<String> str= new ArrayList<String>();
public void addString(String a)
{
str.add(a);
}
public void takeALocalCopy(Test c)
{
Test localCopy1= c;
localCopy1.addString("Two");
//Expecting output -->One,Two -->Success.
System.out.println(localCopy1.toString());
Test localCopy2= c;
localCopy2.addString("Three");
//Expecting -->One,Three but actual is One,Two,Three.
System.out.println(localCopy2.toString());
}
@Override
public String toString() {
return "Test [str=" + str + "]";
}
public static void main(String[] args)
{
Test c= new Test();
c.addString("One");
c.takeALocalCopy(c);
}
}
输出:
Test [str=[One, Two]]
Test [str=[One, Two, Three]] //Expected One, Two
答案 0 :(得分:0)
虽然你称之为..Copy..
,但我认为你误解了你所复制的内容。存储在引用类型变量中的值是对对象的引用。所以你要复制的是参考值,而不是对象。
您在应用中创建了一个Test
类型的实例,main
方法
Test c= new Test();
然后传递了c
中存储的引用值。该值的每次使用仍然引用同一个对象。