A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

暴力反射

中级黑马

  • 黑马币:4

  • 帖子:17

  • 精华:0

做的是一个超市购物的DOS系统,其中有一个老板添加货物的模块
  1.         public  static void addNew() {
  2.                 Goods myGood=new Goods();
  3.                 System.out.println("请添加商品");
  4.                 System.out.println("请输入商品名称");
  5.                 myGood.name=enterString();
  6.                 myGood.ID=getNumber();
  7.                 System.out.println("请输入商品单价");
  8.                 myGood.price=enterDouble();
  9.                 list.add(myGood);
  10.         }
复制代码


这是老板查账的逻辑
  1.         public static void check() {

  2.                 for (;;) {

  3.                         System.out.println("老板欢迎您!您要干嘛呀?");
  4.                         //库存清单,添加新商品
  5.                         System.out.println("1:流水查询 2:总收入查询 3:库存清单 4:添加新商品 5:退出查询");

  6.                         int choose = enterNumber();

  7.                         switch (choose) {
  8.                         case 1:
  9.                                 checkFlow();
  10.                                 break;
  11.                         case 2:
  12.                                 checkTotalMoney();
  13.                                 break;
  14.                         case 3:
  15.                                 printTicket();
  16.                                 return;
  17.                         case 4:
  18.                                 addNew();
  19.                                 return;
  20.                         case 5:
  21.                                 System.out.println("欢迎老板下次光临!");
  22.                                 break;
  23.                         default:
  24.                                 System.out.println("您输入的内容有误,请重新输入!");
  25.                                 break;
  26.                         }
  27.                 }
复制代码


敲完后,我原本以为会出一个bug,如果添加了多个货物,myGood会覆盖掉原有的存在ArrayList中的值,结果一运行,却是对的,思考了一会,我认为是这个原因,ArrayList中存的是直接就是Goods对象的地址,已经和myGood这个引用没有关系了,不知道理解的对不对,希望大家一起讨论

9 个回复

倒序浏览
Goods myGood=new Goods();myGood是变量名,在栈上,这就是把对象Goods的地址给了myGood,

list.add(myGood);通过地址值把对象Goods添加到ArrayList的集合中,myGood就是中间变量用来传地址值用的。还是有用的
回复 使用道具 举报
嗯嗯言之有理。
回复 使用道具 举报
张大神我只看看
回复 使用道具 举报
river1205 发表于 2015-12-12 22:14
Goods myGood=new Goods();myGood是变量名,在栈上,这就是把对象Goods的地址给了myGood,

list.add(myGood ...

恩,这位同学理解的很透彻,对我的帮助很大
回复 使用道具 举报
学习到了 今天学这个都晕了
回复 使用道具 举报
表示路过....
回复 使用道具 举报
LSD-ZWH 中级黑马 2015-12-12 22:24:12
8#
过来长点知识1
回复 使用道具 举报
___ 中级黑马 2015-12-12 22:29:50
9#
嗯,这个确实不错,有道理
回复 使用道具 举报
sooul 中级黑马 2015-12-12 22:53:07
10#
今天又涨见识了,,,java基础在学
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马