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

© ぺsimon☆ 中级黑马   /  2013-4-20 17:39  /  1145 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ぺsimon☆ 于 2013-4-21 11:18 编辑
  1. 代码如下
  2. /**
  3. 需求:简单的买票程序
  4. 多个窗口买票

  5. */

  6. class Ticket extends Thread
  7. {
  8.         private static int t=100;
  9.         public void run()
  10.         {
  11.         while(true)
  12.         {
  13.         if(t>0)
  14.         {
  15.         System.out.println(Thread.currentThread().getName()+"sale:"+t--);
  16.         }
  17.         }
  18.         }
  19. }

  20. class TicketDemo
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.         Ticket t1=new Ticket();
  25.         Ticket t2=new Ticket();
  26.         Ticket t3=new Ticket();
  27.         Ticket t4=new Ticket();
  28.         t1.start();
  29.         t2.start();
  30.         t3.start();
  31.         t4.start();
  32.         }
  33. }
复制代码
问题:下面这句话是怎么运行的呢?怎么打印结果有  Thread-2sale:100
while(true)
        {
        if(t>0)
        {
        System.out.println(Thread.currentThread().getName()+"sale:"+t--);
        }
我的理解是t=100时,判断当whie是真运行下面代码,判断t>0,执行输出代码:System.out.println(Thread.currentThread().getName()+"sale:"+t--);
输出代码不是:t--不是输出99吗,怎么变了100 的呢?  100是怎么来的呢?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览

回帖奖励 +1

本帖最后由 JavaUtil 于 2013-4-20 17:52 编辑

这是运算符的特性。
当你的运算符是(++、--)时,需要判断它是前置还是后置。
如果是前置,表示先赋值,后参与运算。
如果是后置,表示先参与运算,然后再赋值。
你这里的是t--,他会先赋值显示t,再参与运算。等同于:
System.out.println(Thread.currentThread().getName()+"sale:"+t);
t=t-1;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
例如:x=t--,它是先赋值给x然后才自减,所以是显示也有100
回复 使用道具 举报
明白了谢谢
回复 使用道具 举报
如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马