之前做项目的时候遇到的一个问题. 先上代码.
原因是t2其实是t1的引用 t1改变了 t2也会跟着改变. t2改变了 t1也会跟着改变.
这个跟c++中的引用类似 只不过c++引用对象一旦定下来就不能改变 但java则可以改变.
输出结果为:
t2:[qwe, asd, zxc, we]
t1: [asd, zxc]
这样t1和t2就完全没关系了.
public static void main(String []args)
{
ArrayList<String> t1 = new ArrayList<>();
t1.add("qwe");
t1.add( "asd");
t1.add("zxc");
ArrayList<String> t2 = t1;
t1.remove(0);
System.out.println("t2:"+t2);
t2.add("qwe");
System.out.println("t1: "+t1);
}
<span style="font-family:Arial,Helvetica,sans-serif;font-size:18px;background-color:rgb(255,255,255)">输出结果是: t2:[asd, zxc]</span>
t1: [asd, zxc, qwe]原因是t2其实是t1的引用 t1改变了 t2也会跟着改变. t2改变了 t1也会跟着改变.
这个跟c++中的引用类似 只不过c++引用对象一旦定下来就不能改变 但java则可以改变.
如果想要完全复制一个对象的内容到本体上 应该使用对应的构造函数. 代码如下.
public static void main(String []args)
{
ArrayList<String> t1 = new ArrayList<>();
t1.add("qwe");
t1.add( "asd");
t1.add("zxc");
ArrayList<String> t2 = new ArrayList<>(t1);
t1.remove(0);
t2.add("we");
System.out.println("t2:"+t2);
System.out.println("t1: "+t1);
}
输出结果为:
t2:[qwe, asd, zxc, we]
t1: [asd, zxc]
这样t1和t2就完全没关系了.