List元素为泛型时的注意事项

最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调。

编码的过程,遇到一个关于List的小问题。

在调用List.add(E e)的时候范了一个小毛病,很自然地认为list中存储的是 E  对象的另一个实例,其实存储的只是实例的引用。

复现问题:

泛型:Shit类

1 public class Shit {
2 
3     private int id;
4     private String description;
5     private String owner;
6     
7   getters and setters;           
8 }

测试类:

 1 public class CasualTest {
 2     public static void main(String[] args) {
 3 
 4         List<Shit> list =Lists.newArrayList();
 5 
 6         Shit shit = new Shit();
 7         shit.setId(1);
 8         shit.setDescription("a");
 9         list.add(shit);
10         shit.setId(2);
11         shit.setDescription("b");
12         list.add(shit);
13 
14         Shit shit1 = new Shit();//这里new了一个对象
15         shit1.setId(3);
16         shit1.setDescription("c");
17         list.add(shit1);
18 
19         shit1.setId(3);
20         shit1.setDescription("c");
21         list.add(shit1);
22 
23         System.out.println(JsonUtils.toJson(list));
24     }
25 }

 

看下复现的结果:

1 [{"description":"b","id":2},{"$ref":"$[0]"},{"description":"c","id":3},{"$ref":"$[2]"}]

list中的对象,只打出了两个。另外两个,都是引用,分别指向了$[0]第一个元素和$[2]第三个元素。

list中只是存了一个引用,当你用这个引用修改实例的值时,所有值是这个引用的list的元素多会被修改。

 

转载于:https://www.cnblogs.com/AaronCui/p/5640001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值