首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-20 
2011-3-9(java的传值方式)??? 以前在书上看到过,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);
??? ??? ??? }

热点排行