最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调。
编码的过程,遇到一个关于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的元素多会被修改。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx