3:他们两个都能修改同一个实例的x,y
5:Integer是类,只能修改指向不能修改值
7:i是局部变量,在inc.fermin(i);执行后i还是0,再执行i = i++;i被赋值为i++,因为i++仍是0,故i也为0

解决方案 »

  1.   

    5.Integer的值怎么改变?Integer 和 String 一样, 一旦建立,值就无法改变. 不过可以通过指向其他Integer对象来达到改变值的目的. 比如 Integer a = new Integer(5);
                          Integer b = new Integer(6);
                          a = b;    // 没有改变a的值,只是将a指向了b对象的地址.7.为什么输出0而不是1?int i =0;i = i++;  // 注意这里是 i=i++ 而不是i++. i在运算之前是0,所以i=i++ = 0
      

  2.   

    但注意若是 i = ++ i ; 那么I的值就不是0,而是1了。//前这是先赋值,这里是先加再赋值
      

  3.   

    to zhutouzip:
      能修改同一个实例的是否是因为实现runable接口的是同一个类,因为回调?但即使如此,就没有不同步的问题吗?2个以上的线程修改同一个变量肯定有不同步的问题,但我试了多次,显示到了5000多,x还是等于y?第7题仍不明白:
    i=i++;i先赋值给i这是没有异议的,但请注意,i++相当于i=i+1,第二步i还是要自增的,而且会改变i的值,否则++就没有存在的意义了,这又作何解释?
      

  4.   

    当一个线程执行到x++后突然停止,让出cpu来供另一个线程运行,在这种情况下x,y的值可能不同,理论上这种情况是存在的,cpu在何时会执行这种动作说不准!
    第七题:执行i=i++;是先把i的值赋给i,然后在执行i+1(记住没有赋值给i);
      

  5.   

    其他没什么,第3题
    你连sleep都不设置....
    x++和y++的运算速度是非常快的,比for语句的切换快得多
    而且你的线程并没有设置sleep,使得2个线程争抢优先级
    越运行到后面,越有可能某个线程循环多次,而另一个线程等待
    这个题目,你只需要在x++和y++中间插上Thread.sleep(x),x秒自己定50~100就可以有明显效果了
      

  6.   

    to zhutouzip:
      第7题:i++总是会把新值赋值给自己,难道放在赋值表达式里,就不给自己赋值了?
      

  7.   

    http://community.csdn.net/Expert/TopicView1.asp?id=3885309这个贴有深入讨论~~~ 建议去看看
      

  8.   

    to fxbird你说错了,= 操作符先计算右边的值,在完成++后,i确实被加了1,但之后i又被复值为0,
    所以执行完i = i++, 后i 仍然是0
      

  9.   

    ????
    不解:用c语言环境运行了一下,输出是1啊,在我想可能是i在java中是个类的实例的缘故吧(深层次的问题)
      

  10.   

    外面有个帖子,你去看看http://community.csdn.net/Expert/topic/3885/3885309.xml?temp=.7329981