亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我嘗試將對象添加到列表時,下面的代碼有什么問題

當我嘗試將對象添加到列表時,下面的代碼有什么問題

LEATH 2021-10-20 15:55:19
請參考下面的代碼,讓我知道我哪里出錯了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"但不是它,我得到的列表是-:[Employee [employeeId=1026751, employeeName=Jack Reacher], Employee [employeeId=1026751, employeeName=Jack Reacher], Employee [employeeId=1026722, employeeName=Tom Cruise]]為什么 0 索引上的元素正在改變......
查看完整描述

2 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您Employee兩次添加了相同的引用:


e.setEmployeeName("Rishabh Bansal");

list.add(e);

e.setEmployeeName("Jack Reacher");

list.add(e);

但是這兩個引用仍然指向同一個對象,你正在改變它。


所以你也應該在這里創建新對象。


查看完整回答
反對 回復 2021-10-20
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

這是您的列表在前兩個 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 上的對象僅僅因為你的要求而改變了。如果你只有一個對象,你就只有一種狀態。想要列表中的三個州?需要三個對象。


查看完整回答
反對 回復 2021-10-20
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號