最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调。
编码的过程,遇到一个关于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的元素多会被修改。
时间: 2024-10-06 14:44:55