在开发的过程中,有个场景是list遍历,然后对里边的元素对象进行操作,由于对象都变成Object类型了,所以需要做一次类型转换,然后再操作,但是不放心是否真的改变了原对象,所以写了个测试。
@Test
public void inner(){
List<Object> list = new ArrayList<>();
VoteInfoVO v1 = new VoteInfoVO();
v1.setLabelStatus(new HashMap<>());
VoteInfoVO v2 = new VoteInfoVO();
v2.setLabelStatus(new HashMap<>());
list.add(v1);
list.add(v2);
list.forEach(v->{
VoteInfoVO vvv = (VoteInfoVO) v;
vvv.setViewCount(777L);
vvv.getLabelStatus().put("nmsl","zd");
VoteInfoVO vv = JSONObject.parseObject(JSON.toJSONString(v), VoteInfoVO.class);
vv.setViewCount(12L);
vv.getLabelStatus().put("qwer",123);
});
System.out.println(list);
}
断点调试一下,看到如下结果
可以看到,强转的是同一个对象,引用地址相同,通过json转换的不是同一个对象,所以改变不了原对象,除非你重新add覆盖原对象。
强转如果怕出问题,可以使用instanceof先判断一下是不是同一个实例即可。