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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 自己玩 于 2011-12-17 20:21 编辑

class bank
{
        private  int sum;
        public void add(int a)
        {
                sum+=a;
                System.out.println("sum=   "+sum);
        }
}
class cun implements Runnable
{        /*问题1*/private bank b=new bank();

        public void run()
                {
                        for (int x=0;x<3 ;x++ )
                        {        /*问题1*/b.add(100);
                                /*问题2*/new bank().add(100);
                        }
                }
}
class bankdemo
{       
        public static void main(String[] agrs)
        {        cun c=new cun();
                Thread t1=new Thread(c);
                Thread t2=new Thread(c);
                t1.start();
                t2.start();
        }
}
如题,将上面/*问题1*/后面的代码和/*问题2*/后面的代码互换得到的结果不同,不知道为什么。
那位高手帮忙解答,谢谢!

2 个回复

正序浏览
/*问题1*/b.add(100);  每次sum 都+100, 加3次=300

new bank().add(100)  创建3次没有引用的新bank对象, 每个对象的sum都是100

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李明 黑马帝 2011-12-15 22:34:56
沙发
/*问题1*/b.add(100);    创建的对象b唯一。
/*问题2*/new bank().add(100);  每次都创建一个对象

所以结果肯定不一样的

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马