设为首页 加入收藏

TOP

List元素为泛型时的注意事项
2019-03-10 16:07:51 】 浏览:94
Tags:List 元素 时的 注意事项

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


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


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


复现问题:


泛型:Shit类


public class Shit {


    private int id;
    private String description;
    private String owner;
   
  getters and setters;         
}


测试类:


public class CasualTest {
    public static void main(String[] args) {


        List<Shit> list =Lists.newArrayList();


        Shit shit = new Shit();
        shit.setId(1);
        shit.setDescription("a");
        list.add(shit);
        shit.setId(2);
        shit.setDescription("b");
        list.add(shit);


        Shit shit1 = new Shit();//这里new了一个对象
        shit1.setId(3);
        shit1.setDescription("c");
        list.add(shit1);


        shit1.setId(3);
        shit1.setDescription("c");
        list.add(shit1);


        System.out.println(JsonUtils.toJson(list));
    }
}


看下复现的结果:


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


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


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python实现创建字典 下一篇Base64编码的原理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目