最近修改项目中的功能代码时,遇到一个情况,在for循环中对一个for外部的对象做操作后存入list,list中的对象最后都变成最后一次for循环后操作的对象,因为之前没有遇到过,现在记录下来。
输出结果 年龄是:2
年龄是:2
年龄是:2
这里后面的循环对user做出来修改,是因为for循环中操作的对象user在内存中指向了同一块地址,所以会对之前添加到list中的user对象同样做修改。
如果项目可以改动的话把new对象放在for循环中
不能改动的话 用JsonObject序列化转换一下就可以了
public static <T> T copy(Object object, Class<T> tClass) {
if (object == null) {
return null;
}
String jsonStr = JSONObject.toJSONString(object);
return JSONObject.parseObject(jsonStr, tClass);
}
改完之后输出结果是
年龄是:0
年龄是:1
年龄是:2