在开发的过程中,有个场景是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先判断一下是不是同一个实例即可。
在Java开发中,当遍历List<Object>并需要对元素进行操作时,可能需要类型转换。文章通过一个测试用例展示了直接类型转换不会创建新对象,而使用JSON转换会创建新对象。建议使用instanceof检查确保对象实例正确再进行转换。
1592

被折叠的 条评论
为什么被折叠?



