今天碰到一个问题:
问题大概是:
现在需要一个jsonArray的对象作为最终需要的对象,其中map作为中转存入jsonArray,本来预想的结果是.每个List的参数都能被不同的存入jsonArray,但是运行起来发现,其实存在jsonArray里的对象都是同一个,wtf!
JSONArray dataJsonArray = new JSONArray();
Map<String, String> dataMap = new HashMap<>(16);
for (SendMessageReq sendMessageReq : sendMessageReqList) {
dataMap .put(xxx);
dataJsonArray.add(dataMap);
}
然后就有一个很奇怪的问题,明明传进来的LIst参数有多个不同的对象,放入map的时候也是不同的,但是放入jsonArray后,jsonArray的size没有错误但是他的内容都是List参数的最后一个对象,排查很久没结果,最后发现是map对象和指针的问题
JSONArray dataJsonArray = new JSONArray();
for (SendMessageReq sendMessageReq : sendMessageReqList) {
Map<String, String> dataMap = new HashMap<>(16);
dataMap .put(xxx);
dataJsonArray.add(dataMap);
}
改成这样就没有问题,那么是为什么呢?
原因是我们put相同key的值进去的时候,其实修改的是map的对象,但是我们把map加入jsonArray时存入的只是地址,所以我们改变的是所有的jsonArray的内容,所以我们应该新建map去存
问题解决!
解决bug的感觉太快乐了