黑马程序员技术交流社区

标题: 一个小知识点,不是很明白 [打印本页]

作者: 邱纲    时间: 2012-2-17 16:10
标题: 一个小知识点,不是很明白
定义了一个int类型的数据:int countDown = 3;
  while(true){
        if(--countDown ==0)
            return ;
}

我是想 问--countDown是什么意思啊,如果说countDown--,这个倒是常见,countDown每运行一遍-1,那上面这个是什么意思呢,难道仅仅只是写法不一样吗?
作者: 朱辉    时间: 2012-2-17 16:16
countDown--,这个是每运行一遍然后-1;--countDown这个是先-1然后再运行,两种情况是不一样的
作者: 刘基军    时间: 2012-2-17 16:17
下面的代码运行,a等于b吗?:(i++与++i 的区别

  1.      int i = 5;
  2.      int j = 5;
  3.      int a = i--;
  4.      int b = --j;
  5.      System.out.println(a);
  6.      System.out.println(b);
复制代码

作者: b_boywindy    时间: 2012-2-17 16:19
这种问题 自己运行一下  稍微测试一下就知道了  
作者: 黄锦成    时间: 2012-2-17 16:26
while(true){
         if(--countDown ==0)
             return ;
}
--countDown:countDown每次先自己减1,再来跟0比较;
countDown--:countDown每次先跟0比较,再来自己减1;
放的位置不一样,参与运算的顺序也不一样

作者: 彭坤    时间: 2012-2-17 18:11
给你举个例子吧:
  1. int i=10;
  2. while(true){
  3.         if(--i ==0)//这里是先将i的值减1,得到是的9,再与0进行==运算。
  4.             return ;
  5. }
  6. while(true){
  7.         if(i-- ==0)//这里是先将i与0进行==运算,再将i的值减1,得到是的9
  8.             return ;
  9. }
复制代码
总之一句话:--i是先-1,再运算,相当于(到肯德基先付钱再吃东西;i--是先运算完了再-1,相当于(去餐馆等饭吃完了再买单).感觉这个例子比较形象,佩服自己一个先

作者: 郭繁森    时间: 2012-2-17 19:44
   if(--countDown ==0)
JVM执行到此,变量countDown 变为2.        减减 在前是:变量先执行减1动作再看 countDown 是否==0
若是 countDown --   ,执行到这  countDown 就是3

作者: 自己玩    时间: 2012-2-17 23:32
--countDown这个是先-1然后再运行

countDown--,这个是每运行一遍然后-1
比如说countDown的初值为5,则“--countDown”代表的值为4,countDown的值为4
“countDown--”代表的值为5,countDown的值为4
作者: 何招俊    时间: 2012-2-18 01:24
countDown--,是每运行一遍然后-1;--countDown是先-1然后再运行.
作者: 仵先进    时间: 2012-2-18 09:15
就是++ ,--的问题呀
作者: 李晓俊老师    时间: 2012-2-18 09:22
加加减减的问题,你这么记吧:加减在前就先加减在运算,加减在后就先运算后加减..
把运算比作打人的话,加减在前就好比先给人医药费在打人家,,在后就是先打人在给医药费...........
作者: 【专】【属】    时间: 2012-2-19 18:37
对于前面的:是先对变量自加或自减,后赋值。
对于后面的:是先赋值,后自加或自减
作者: 黑马连家华    时间: 2012-2-19 18:57
哈哈,原来也有你不会的呀。。。
正巧这个我会一点
我认为
一条语句中--在前就是先把变量减一再进行其它运算,--在后就是选运算语句,然后再改变变量
作者: 马胜平    时间: 2012-2-19 19:12
本帖最后由 马胜平 于 2012-2-19 19:12 编辑
刘基军 发表于 2012-2-17 16:17
下面的代码运行,a等于b吗?:(i++与++i 的区别)


不相等,a输出还是5因为i是先赋值给后在自减的,b真好相反
作者: 许圣建    时间: 2012-2-19 19:14
楼主只需要简单测试一下就O了:int x=10;System.out.println(--x);int y=10;System.out.println(y--);
JAVA 是开源的语言,我觉得亲自探索才有乐趣,也许一个问题你钻进牛角尖会纠结一两天但最终都会恍然大悟,何其爽哉。

作者: 唐溪永    时间: 2012-2-19 19:34
这个其实涉及运算符中的++(自加),--(自减)问题。++或--放在前面(前缀)则先进行加或减1运算,再运算下面的;++或--放在后面(后缀)则使用先运算,再进行加或减1运算。
例如
int m = 7;
int n =7;
int a = 2* ++m;//现在a 是 16,m是8
int b = 2* n++;//现在b 是 14 ,n是8




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2