以前在书上看到过,java的基础数据类型的传值是值传递,而非基础类型的传值为引用传值(传的是放数据的对象的地址)。对java的传值方式没有很深刻的理解。通过这次犯的错误,使我对java的传值方式理解了一点。
我是想把一条一条的记录通过jo放入到jsonArr中。
错误代码:
JSONObject jo = new JSONObject();
for (i = 1; i < bbsTagOptionList.size()+1; i++) {
BbsSubject bs = (BbsSubject) bbsTagOptionList.get(i-1);
Long bbsSubjectId = bs.getId();
String name = bs.getName();
jo.put("bbsSubjectId", bbsSubjectId);
jo.put("name", name);
jsonArr.put(i, jo);
}
打印输出后,jsonArr中所有的数据都跟最后一条数据一样(jsonArr[0]==jsonArr[1]==jsonArr[2]),很不明白。
只好求助师姐,师姐很快发现了问题的所在。jsonArr.put(i,jo);只是把jo的地址传进了jsonArr中。而我写的错误代码中只声明了一个JsonArray对象,当然jsonArr中的放的都是同一个地址,当然每条值根据地址找到的都是最后一次放入jo中的值。
正确代码:
for (i = 1; i < bbsTagOptionList.size()+1; i++) {
BbsSubject bs = (BbsSubject) bbsTagOptionList.get(i-1);
Long bbsSubjectId = bs.getId();
String name = bs.getName();
JsonObject jo=new JsonObject();
jo.put("bbsSubjectId", bbsSubjectId);
jo.put("name", name);
jsonArr.put(i, jo);
}