黑马程序员技术交流社区

标题: 这个题结果为什么是0 [打印本页]

作者: 光头强    时间: 2014-10-9 20:55
标题: 这个题结果为什么是0
public class Test3 {
    public static void main(String[] args) {
            int j = 0;
        for (int i = 0; i < 100; i++)
              j = j++;
              System.out.print(j);
               
    }
}
作者: hollywood2014    时间: 2014-10-9 21:04
  1.    j = j++;
复制代码
楼主,错误在这里,因为你之前定义过j=0了,那么右边的j++就等于1了,0=1是没有意义的,返回的是布尔值对吗?这是一个比较表达式,而不是赋值表达式
你可以写成
j=j+1;
它是一个赋值表达式

作者: 光头强    时间: 2014-10-9 21:12
hollywood2014 发表于 2014-10-9 21:04
楼主,错误在这里,因为你之前定义过j=0了,那么右边的j++就等于1了,0=1是没有意义的,返回的是布尔值对吗 ...

不是吧  这个不是赋值语句吗
作者: 踏云    时间: 2014-10-9 21:12
本帖最后由 踏云 于 2014-10-9 21:16 编辑

楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后j=j+1;然后再返回temp给调用者。
所以过程是,
int temp=j;
j=j+1;
然后又把temp返回给j:
j=temp;

所以j的值永远都是初始值0;
如果只是要算次数的会直接 j++;就可以了
j++;约等于j=j+1;

作者: 光头强    时间: 2014-10-9 21:15
踏云 发表于 2014-10-9 21:12
楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后j=j+

你好  可以加好友给我讲讲吗785328475
作者: 踏云    时间: 2014-10-9 21:17
光头强 发表于 2014-10-9 21:15
你好  可以加好友给我讲讲吗785328475

已近在上面讲的很清楚了
作者: hollywood2014    时间: 2014-10-9 21:25
光头强 发表于 2014-10-9 21:12
不是吧  这个不是赋值语句吗

抱歉,是我理解错误,是赋值语句
正确的解释是,i=i++;这个i是下次使用的时候才自加的,此时他还是为0,所以是0=0;i又变回0了,所以i始终为0,这才是正解(想起了c语言.....)
作者: 光头强    时间: 2014-10-9 21:27
踏云 发表于 2014-10-9 21:12
楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后j=j+1;然后再返回temp给调用者。
所 ...

谢谢大神  求加好友
作者: 光头强    时间: 2014-10-9 21:28
踏云 发表于 2014-10-9 21:17
已近在上面讲的很清楚了

那么++j   前加加怎么理解
作者: 踏云    时间: 2014-10-9 21:48
++j的话就更简单了,j直接加1,然后再赋值给调用者,
j=++j;相当于

j=j+1;
j=j;

所以上面的会输出100
作者: cs8630323    时间: 2014-10-10 00:40
hollywood2014 发表于 2014-10-9 21:04
楼主,错误在这里,因为你之前定义过j=0了,那么右边的j++就等于1了,0=1是没有意义的,返回的是布尔值对吗 ...

你这会胡扯{:3_50:}
作者: youtianlong123    时间: 2014-10-10 01:28
后++是后先附值,然后再自增
作者: HM2014nuli    时间: 2014-10-10 07:19
虽然有for循环但是你并没有把j=j++和打印的一同括起来,再一个就是j++,++j,一个是先看结果在运算,一个是先运算再看结果,由于没循环到,所以打印的是0,新人一个希望能帮到你。
作者: 不系之舟王    时间: 2014-10-10 08:46
j=j++是把j++的值赋给j,而每次for循环,j++的值都不变,始终是0,所以结果为0
(j++是每次j的值自增,而j++的值不变。++j是每次j的值自增,而++j的值也自增,j和++j同步变化)
作者: 小城。    时间: 2014-10-10 09:03
涨知识了
作者: 菜鸟一号    时间: 2014-10-10 09:20
可爱的光头强
作者: hanliang    时间: 2014-10-10 11:51
这样和你说吧,给你举个例子吧,看了就明白了。假设a=4,那么b=++a,这时是先把a的值加1,然后再把此时a得值复制给b,所以此时b的值为5,a的值也为5;还有一种就是b=a++,就是先把a的值复制给b,然后a的值再加1,所以此时b的值为4,a的值为5,。就是这些,希望你能明白,不明白再问我。
作者: 懒羊羊    时间: 2014-10-10 12:48
J++是先赋值后自增哦
作者: hanliang    时间: 2014-10-10 12:55
hanliang 发表于 2014-10-10 11:51
这样和你说吧,给你举个例子吧,看了就明白了。假设a=4,那么b=++a,这时是先把a的值加1,然后再把此时a得值 ...

至于循环的话,你只要看懂刚刚那个,就是循环N次都是如此结果
作者: 默默丶    时间: 2014-10-10 13:22
因为是先赋值给左边的j 然后右边的j++;然后返回的左边的j是没加之前的j就是你初始化的0 所以最后也是0
作者: 高泳    时间: 2014-10-10 13:29
上面讲的很清楚
作者: 在学野马    时间: 2014-10-10 13:32

  1. //public class test3 {
  2. //    public static void main(String[] args) {
  3. //
  4. //            int j=0;
  5. //        for (int i = 0; i<100; i++){
  6. //   
  7. //                j=j++;   //每次++但又返回给了j
  8. //           
  9. //        }
  10. //        System.out.println(j);  
  11. //    }
  12. //}

  13. public class test3 {
  14.     public static void main(String[] args) {

  15.             int j=0;
  16.         for (int i = 0; i<100; i++){
  17.    
  18.                 j++;         //这个才是自增
  19.            
  20.         }
  21.         System.out.println(j);  
  22.     }
  23. }
复制代码

作者: 戏言丶    时间: 2014-10-10 15:10
j++和++j的区别:j++先赋值再进行自增,而++j先自增再赋值
作者: chenglove1201    时间: 2014-10-10 18:22
踏云 发表于 2014-10-9 21:12
楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后j=j+1;然后再返回temp给调用者。
所 ...

明白了,受教啦
作者: mingtianrsm    时间: 2014-10-10 19:59
懒羊羊 发表于 2014-10-10 12:48
J++是先赋值后自增哦

额,这个说法是错误的,毕老师在讲解运算符时重点说了
作者: mingtianrsm    时间: 2014-10-10 20:00
楼主看一下毕老师关于运算符的视频吧,里面有这个的内存图解
作者: 奋发吧小白    时间: 2014-10-10 20:06
其实很简单 只要楼主弄清楚 j++和++j就会明白的! 添加上循环就是糊弄人的 !你可以直接 看成 int j=0
作者: getone    时间: 2014-10-10 20:09
其实就是i++和++i的问题,先自增和后自增的区别
作者: 646245771    时间: 2014-10-10 20:13
也就是这么个原理
j = j++;  是先将右边的j赋值给左边的j,然后再++

j = ++j; 是右边先++,然后再赋值给左边。

至于为什么是,那是因为每次都先将0赋值给左边的j,而j又是在for循环内部,每次都从0开始循环,自然就是0.貌似是这么个原理吧
作者: 踏云    时间: 2014-10-10 21:28
本帖最后由 踏云 于 2014-10-10 21:36 编辑
mingtianrsm 发表于 2014-10-10 19:59
额,这个说法是错误的,毕老师在讲解运算符时重点说了
好吧,看错了,sorry
作者: 水竹    时间: 2014-10-10 21:33
踏云 发表于 2014-10-10 21:28
本来,我一般都不刁人,可是,你说我的答案是错的,还动不动就把毕老师搬出来。
在毕老师自增运算的视屏的 ...

??
他回复的不是你啊??
作者: 韶山    时间: 2014-10-10 21:35
学习了。
作者: mudao    时间: 2014-10-10 21:42
一楼解释的精辟,其实这个题与循环没有什么关系,就是j++的运算原理最好的体现。
作者: 笑脸迷人    时间: 2014-10-10 22:32
又学到了一点~
作者: 康师傅-蛋黄派    时间: 2014-10-10 22:49
学习了,看了2楼,才知道J++是这么运算的
作者: 千里马    时间: 2014-10-10 23:06
踏云 发表于 2014-10-9 21:12
楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后j=j+1;然后再返回temp给调用者。
所 ...

这位同学理解的很透切,发自心底的佩服




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