java吧 关注:1,297,647贴子:12,835,640
  • 33回复贴,共1

输出结果为什么会不一样

只看楼主收藏回复

小弟初学java好多不懂,各位大神求带
int sum = 0;
for(int a=3000 ;a >= 5;a = a/2 )
sum = sum ++;
System.out.println("需要"+sum+"天");
for(int a=3000 ;a >= 5;a = a/2 )
sum = sum + 1;
System.out.println("需要"+sum+"天");
为什么上面一句输出0,后面一句是10。
sum++和sum+1不是应该等同吗?


IP属地:福建1楼2016-05-08 20:21回复
    哪位大神给说明一下呗


    IP属地:福建3楼2016-05-08 20:29
    回复
      2026-02-17 08:03:54
      广告
      不感兴趣
      开通SVIP免广告
      sum=sum++和sum++是不一样滴,不过这也取决于编译器


      IP属地:广西5楼2016-05-08 20:45
      收起回复
        你这个是那个3000绳子去一半吧,我们书上也有这个题目


        6楼2016-05-08 20:48
        回复
          public class Main
          {
          public static void main(String[] args)
          {
          int n=3000,i=1;
          do
          {
          n=n/2;
          i=++i;
          }
          while(n>5);
          System.out.print("需要" + i + "天");
          }
          }


          7楼2016-05-08 20:49
          回复
            这个是我做的


            8楼2016-05-08 20:50
            收起回复
              我都给你搞懵了,后来才知道,先赋值,后自增。。。


              来自Android客户端9楼2016-05-08 21:11
              回复
                jvm(java虚拟机)运行原理是 sum++需要用自增前的那个值,运行的时候jvm声明了一个变量保存了sum的值,假如这个变量是i既i=sum,值为0,sum自增变成1,最后返回了i,sum++值由0变为了1,sum=sum++值是由0变成了1,然后又返回了自增前的0赋给了sum,


                IP属地:上海来自Android客户端10楼2016-05-08 21:38
                收起回复
                  2026-02-17 07:57:54
                  广告
                  不感兴趣
                  开通SVIP免广告
                  sum = sum ++;等同于sum=(sum++);
                  这句代码很复杂,我度量了之后这么理解的。
                  sum++是一个表达式,是有返回值的,它的返回值就是sum自加前的值,Java对自加是这样处理的:首先把sum的值(注意是值,不是引用)拷贝到一个临时变量区,然后对sum变量加1,最后返回临时变量区的值。
                  所以(sum++)返回的值其实还是0,最后sum=0。
                  程序第一次循环时的详细处理步骤如下:
                  步骤1 JVM把sum值(其值是0)拷贝到临时变量区。
                  步骤2 sum值加1,这时候sum的值是1。
                  步骤3 返回临时变量区的值,注意这个值是0,没修改过。
                  步骤4 返回值赋值给sum,此时sum值被重置成0。


                  11楼2016-05-08 22:27
                  收起回复
                    简单来说,就是sum++先返回,再赋值的


                    IP属地:四川12楼2016-05-08 22:34
                    回复
                      int a = 0;
                      int b = 0;
                      a = b++;
                      System.out.println(a); //0
                      System.out.println(b); //1
                      你明白了吗 ?
                      实际上sum=sum++;这种写法是不应该存在的 , 直接就sum++才行
                      sum++; 等同于 sum=sum+1;
                          ------经验到手 , 转身就走 , 姿势要帅 , 速度要快~


                      13楼2016-05-09 11:33
                      回复
                        sum=++sum;


                        来自Android客户端14楼2016-05-09 11:44
                        回复