这样做有什么区别?
Test test = new Test();
for(Person person:personLst) {
test.setName(person.getName());
test.setId(person.getId());
}
通过这个 -
for(Person person:personLst) {
Test test = new Test();
test.setName(person.getName());
test.setId(person.getId());
}
这两种情况都会覆盖数据吗?
答案 0 :(得分:1)
对于对象数据覆盖,您将获得与相同的结果,但创建测试对象的开销与personLst中的人员一样多。即将到来的开销带来了一个优点,即在循环中保持person对象状态的变量。相反,在第一种情况下,您只能访问最新的人物对象数据。
换句话说,在第一种情况下,在内存中为对象测试保留了一些空间(即字段名和id):
Case 1:
Address Memory Space
[test]---> [name]
[id]
...
[test]---> [nameN]
[idN]
但是在第二种情况下,你总是在你的记忆中的不同位置创建新的对象(当特定的循环步骤结束时,先前的创建就会消失 - 这意味着在某些时候释放了内存):
Case 2:
Address Memory Space
[test]---> [name]
[id]
...
[testN]--->[nameN]
[idN]
[test] ... [testN]表示代表Test对象的内存区域的地址(简化模型)。
答案 1 :(得分:1)
这很难回答,因为我们不知道
从我们的代码中可以看出,第二个循环只是一个无操作,第一个循环可以替换为仅使用列表中的最后一项进行更新,而忽略其他条目。
答案 2 :(得分:0)
第一个: test对象属性将具有列表中最后一个人的属性
第二个: 您可以将任何Test对象创建为只能在for循环中访问的Person obejct
答案 3 :(得分:0)
这取决于你想要达到的目标。
案例1:您只创建“Test”类的一个实例并在循环中更改其值。如果任何其他方法需要测试作为输入,这很好。您正在将Person对象转换为Test对象并将其传递。
案例2:在这里创建多个Test实例(等于personLst中的项目数)。如果要将所有Person对象转换为Test对象并存储在列表(或任何集合)中以供将来使用,那么这是正确的。