2011-3-9(java的传值模式)

2011-3-9(java的传值方式)

    以前在书上看到过,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);
            }