Java 是否复制或引用了ArrayList对象?
所以我正在阅读游戏教程,里面有一些代码可以让带有外星人/导弹的ArrayList在碰撞时消失Java 是否复制或引用了ArrayList对象?,java,Java,所以我正在阅读游戏教程,里面有一些代码可以让带有外星人/导弹的ArrayList在碰撞时消失 ArrayList ms = craft.getMissiles(); for (int i = 0; i < ms.size(); i++) { Missile m = (Missile) ms.get(i); Rectangle r1 = m.getBounds(); for (int j = 0; j<aliens.si
ArrayList ms = craft.getMissiles();
for (int i = 0; i < ms.size(); i++) {
Missile m = (Missile) ms.get(i);
Rectangle r1 = m.getBounds();
for (int j = 0; j<aliens.size(); j++) {
Alien a = (Alien) aliens.get(j);
Rectangle r2 = a.getBounds();
if (r1.intersects(r2)) {
m.setVisible(false);
a.setVisible(false);
}
}
}
在最后一个循环中,m.setVisiblefalse和a.setVisiblefalse使特定的外星/导弹不可见,但“a”和“m”不是ArrayList的一部分,它们是ArrayList对象,被拉出并浇铸到“a”和“m”中,但代码似乎工作正常,因为编码器没有将“a”或“m”对象插入ArrayList中的特定位置或更新其属性arraylist中对应的对象
这让我想,“a”和“m”是否由地址引用到arraylist中的第i个对象而不是副本?Java中的对象总是通过引用进行复制,除非您克隆它们。因此,除非您使用的是原语,否则在使用赋值运算符或从函数返回原语时,原语是通过引用复制的。是。他们是推荐人。你说什么时候都行
A a = new A();
在Java中,a是一个引用,而不是实际的对象,这是一个常见的混淆源
使用标准集合时,从该集合获取元素将返回对所包含对象的引用。因此,遍历集合并对包含的对象执行更改是很简单的
for(int i = 0; i < list.size(); i++) {
list.get(i).clear(); // changes the object in the list...
}
ArrayList.get为您提供了对对象的引用,而不是副本。引用被复制,除非您调用类似克隆的东西,否则对象不会被复制
顺便说一句:ArrayList包含引用。将对象的引用添加到ArrayList时,对象不会被复制,也不会在ArrayList中被复制。相关答案已提交,因此。。。有一件事-您不应该真正使用for循环的那个版本-查找“for each”循环。除了获取特定元素之外,您似乎没有使用列表的索引…谢谢,我同意。但我只是在遵循一个教程,我想对于我自己的实现,我会注意到这一点!:迭代集合并在包含的对象中执行更改是什么意思?如果我有一个字符串数组列表,并且我想通过迭代将string.com添加到所有字符串中,那么这怎么会很简单呢?试图理解你的陈述。。thanks@user772401字符串是一种特殊情况,而不是简单的,因为它们是不可变的。所以没有可以调用字符串的mutator方法。@user772401-请参阅我的修订答案