关于java中arraylist的使用问题——数据覆盖

下面是实现“购物车功能”的一段代码try{conn=newConnDB().getConn();//创建一个迭代器,用来取出cart中所有商品的IDIteratorit=... 下面是实现“购物车功能”的一段代码
try {
conn=new ConnDB().getConn();
//创建一个迭代器,用来取出cart中所有商品的ID
Iterator it=cart.keySet().iterator();

while (it.hasNext()) {
GoodsBean gBean;
int goodsId =Integer.parseInt((String)it.next());
System.out.println("抓出商品的Id是:"+goodsId+"");
gBean= worker.getGoodsBean(goodsId);
System.out.println("抓出的商品名是:"+gBean.getName());
System.out.println("抓出一个商品信息");
//计算货物总金额
sum+=gBean.getPrice()*(Integer.parseInt(cart.get(goodsId+"")));
list.add(gBean);
}
控制台输出的信息:
抓出商品的Id是:6
抓出的商品名是:三星S3
抓出一个商品信息
抓出商品的Id是:5
抓出的商品名是:苹果笔记本
抓出一个商品信息
抓出商品的Id是:4
抓出的商品名是:Apple4s
抓出一个商品信息
但是最终 list 里的 三个 引用 是一样的,麻烦高手帮看看,哪出问题了
展开
 我来答
无泪的遗憾逗号
2013-05-07 · 超过10用户采纳过TA的回答
知道答主
回答量:16
采纳率:0%
帮助的人:26.1万
展开全部
GoodsBean gBean;这句改为GoodsBean gBean=new GoodBean(); 因为你没有为这个对象开辟一个新的内存空间,所以每次循环的时候都是把之前的那个对象引用重新指向到当前对象。到最后所有的对象都引用最后一次循环中对象的地址,所以list里面的对象都是最后一次循环的内容。希望对你有所帮助
更多追问追答
追问
试过了,运行结果依然一样
追答
worker.getGoodsBean(goodsId);这个类可以拿过来看看么?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b244cf336
2013-05-08 · 超过14用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:32.7万
展开全部
while (it.hasNext()) {
GoodsBean gBean; /* 改成GoodsBean gBean = new gBean(); 这样每次添加都是不同的对象 */
int goodsId =Integer.parseInt((String)it.next());
System.out.println("抓出商品的Id是:"+goodsId+"");
gBean= worker.getGoodsBean(goodsId);
System.out.println("抓出的商品名是:"+gBean.getName());
System.out.println("抓出一个商品信息");
//计算货物总金额
sum+=gBean.getPrice()*(Integer.parseInt(cart.get(goodsId+"")));
list.add(gBean);
}
追问
你说的这个我早就试过了,但是运行结果依然一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
养初厹06
2013-05-08 · TA获得超过203个赞
知道小有建树答主
回答量:784
采纳率:0%
帮助的人:412万
展开全部
gBean= worker.getGoodsBean(goodsId);
目测此行问题。
方法返回的对象缓存了。
添加的都是同一对象的引用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式