python list赋值给另一个list_Java 中如何正确地将一个 List 赋值给另一个 List

声明:

ArrayList arrayList;

上面的代码仅仅只是声明了一个 list 变量,其作用相当于 C++ 中的引用变量(一个对象块的索引),但并未为其分配具体的对象所需要的内存空间,其所分配的空间其实仅仅只是 “arrayList” 变量所需空间。

此时就需要对其进行实例化,实例化的过程是为对象分配所需完整的内存空间。此时,对象 “arrayList” 才是该 list 的一个实例,然后将分配的内存地址返回给定义的变量 “arrayList”。

我们可以看一下下面的这段代码:

ArrayList A = new ArrayList<>();

A.add("1");

A.add("2");

ArrayList B = A;

Log.d(TAG, A.toString());

B.add("3");

Log.d(TAG, A.toString());

上面的代码在 Android Studio 中测试的输出为

测试输出

此时 B 对象相当于 A 对象的引用,而并不是将 A 对象的值单纯的传递给 B 对象,此时 A 与 B 共享 A 对象。即对B 对象的操作将直接改变 A 对象。如 B.add("3"); 结果 A 中也将包含 “3”;

那么如果我们想把 A 的值赋予对象 B,即同时有 A 和 B 两个对象,方式多种:

方式一:

ArrayList C = new ArrayList<>(A);

方式二:

Object aClone = A.clone();

if (aClone instanceof ArrayList>) {

@SuppressWarnings("unchecked")

ArrayList D = (ArrayList) aClone;

}

方式三:

ArrayList E = new ArrayList<>();

E.addAll(A);

方式四:

ArrayList F = new ArrayList<>();

for (String s : A) {

F.add(s);

}

上面四种方式的测试代码如下:

ArrayList A = new ArrayList<>();

A.add("1");

A.add("2");

ArrayList B = A;

Log.d(TAG, "A content: " + A.toString());

B.add("3");

Log.d(TAG, "A content: " + A.toString());

ArrayList C = new ArrayList<>(A);

C.add("4");

Log.d(TAG, "A content: " + A.toString());

Log.d(TAG, "C content: " + C.toString());

Object aClone = A.clone();

if (aClone instanceof ArrayList>) {

@SuppressWarnings("unchecked")

ArrayList D = (ArrayList) aClone;

D.add("5");

Log.d(TAG, "A content: " + A.toString());

Log.d(TAG, "D content: " + D.toString());

}

ArrayList E = new ArrayList<>();

E.addAll(A);

E.add("6");

Log.d(TAG, "A content: " + A.toString());

Log.d(TAG, "E content: " + E.toString());

ArrayList F = new ArrayList<>();

for (String s : A) {

F.add(s);

}

F.add("7");

Log.d(TAG, "A content: " + A.toString());

Log.d(TAG, "F content: " + F.toString());

Log 输出:

Log 输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值