关于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 里的 三个 引用 是一样的,麻烦高手帮看看,哪出问题了 展开
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 里的 三个 引用 是一样的,麻烦高手帮看看,哪出问题了 展开
3个回答
展开全部
GoodsBean gBean;这句改为GoodsBean gBean=new GoodBean(); 因为你没有为这个对象开辟一个新的内存空间,所以每次循环的时候都是把之前的那个对象引用重新指向到当前对象。到最后所有的对象都引用最后一次循环中对象的地址,所以list里面的对象都是最后一次循环的内容。希望对你有所帮助
更多追问追答
追问
试过了,运行结果依然一样
追答
worker.getGoodsBean(goodsId);这个类可以拿过来看看么?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
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);
}
追问
你说的这个我早就试过了,但是运行结果依然一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
gBean= worker.getGoodsBean(goodsId);
目测此行问题。
方法返回的对象缓存了。
添加的都是同一对象的引用
目测此行问题。
方法返回的对象缓存了。
添加的都是同一对象的引用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询