请参考下面的代码,让我知道我要去哪里了
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
classpath 'com.google.gms:google-services:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
google()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我要在
上添加元素public class EmployeeTest {
public static void main(String[] args) {
ArrayList<Employee> list = new ArrayList<>();
list.add(new Employee("1026751","Jack Reacher"));
list.add(new Employee("1026722","Tom Cruise"));
System.out.println(list);
//Employee a = list.get(0);
Employee e = list.get(0);
Employee p = list.get(1);
list.clear();
e.setEmployeeName("Rishabh Bansal");
list.add(e);
e.setEmployeeName("Jack Reacher");
list.add(e);
list.add(p);
System.out.println(list);
}
}
但是我得到的列表不是-:
0 index as "1026751","Rishabh Bansal"
1 index as "1026751","Jack Reacher"
2 index as "1026722","Tom Cruise"
为什么索引0上的元素被更改...
答案 0 :(得分:4)
您两次将相同的引用添加到Employee
:
e.setEmployeeName("Rishabh Bansal");
list.add(e);
e.setEmployeeName("Jack Reacher");
list.add(e);
但是这两个引用仍然引用您正在更改的 same 对象。
所以您也应该在这里创建新对象。
答案 1 :(得分:1)
这是前两个add()之后您的列表的样子:
[oid1, oid2]
oid1和oid2是状态保留在其他位置的对象的“指针”(引用):
oid1 := Employee("1026751","Jack Reacher")
oid2 := Employee("1026722","Tom Cruise")
在两个.get()之后,在这些对象上有两个“句柄”:
e == oid1
p == oid2
然后清除列表,使列表变为:
[]
然后,您更改两个对象之一的状态,并将其添加到列表中,以使您拥有:
[oid1]
oid1 := Employee("1026751","Rishabh Bansal")
oid2 := Employee("1026722","Tom Cruise")
然后,您更改同一对象的状态,然后将其再次添加到列表中,以使您拥有:
[oid1, oid1]
oid1 := Employee("1026751","Jack Reacher")
oid2 := Employee("1026722","Tom Cruise")
所以索引0上的对象只是因为您要而被更改。如果只有一个对象,则只有一个状态。想要列表上的三个状态?需要三个对象。