背景:工作bug
List<X509Certificate> caTrustCert = CommonVariable.getTrustCaCerts();
caTrustCert.add(signCert);
本意通过缓存类CommonVariable获取TrustCaCerts,将CommonVariable.getTrustCaCerts()的值赋给caTrustCert ;
但是出现了拿一次值后size增加一次的情况,也就是通过这种方式缓存值被直接修改了。
举个清晰的例子:
public static void main(String[] args) {
ArrayList<String> A= new ArrayList<>();
A.add("1");
A.add("2");
ArrayList<String> B;
B = A;
B.add("3");
System.out.println(A);
System.out.println(B);
}
运行结果:
[1, 2, 3]
[1, 2, 3]
也就是操作B会直接操作A,此时B对象相当与A对象的引用,而并不是将A对象的值单纯的传递给B对象。 一大误区。
搜罗了网上简单List互相复制的方式,如下:
1.
ArrayList B = new ArrayList<> (A);
2.
ArrayList<String> A = new ArrayList<>();
ArrayList B = A.clone();
3.
ArrayList B = new ArrayList<String>();
B.addAll(A);
4.
for(String s: A)
B.add(s);
参考:https://www.cnblogs.com/firstdream/p/7837724.html