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);
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值