int num= 1;
num= num+(num++);
System.out.println(num);
大家认为打印结果应该为多少?!
我很纳闷,最后一个num++去哪里了?!!!!

解决方案 »

  1.   

    2,
    改成
    int num= 1;
    num= num+(++num);
    System.out.println("this is value="+num);
    就是3
      

  2.   

    看来你还没搞懂"表达式值"的概念。
    (num++)的表达式值为1,变量num值为2;
    所以num=num+(num++)等于1+1=2
      

  3.   

    "表达式值"的概念我想我还是懂的,你的意思无非是num = num+(表达式);如果光从这个层面上更本没什么好值得讨论的。但是关键是在运算完num = num+(表达式)后,最后还有个num++的过程为什么不起作用了。我想知道的事java内部的机制。
    换个角度,如果只是个"表达式值"的概念,那你不妨在C语言里试试同样的语句,看看结果怎么样???!
      

  4.   

    顶,
    C里面结果就是3
    但JAVA里就是2了,
    为什么不一样,那哪个又是正确的呢?
      

  5.   

    当然2个都是正确的,其实我倒觉得C的结果倒是很容易理解,java的倒觉得的怪怪的。
      

  6.   

    num=num+(num++)
    是不是可以这样理解:temp1=num;
    temp2=num;
    num=num+1;
    num=temp1+temp2;如果:
    num=num+(++num):temp1=num;
    num=num+1;
    temp2=num;
    num=temp1+temp2;
      

  7.   

    我来说两句吧。
    INT I=0;I=I++;
    虚拟机见到I++表达式,就新创建了一个对象,作为“I”的副本,同时原对象加一,“I”作为一个引用此时指向了新的对象“I”,虽然老对象的“I”变成了2,但没有引用指向它,它被抛弃了。而新的对象“I”的值是1。I=I++的表达式无论怎么重复,其I的值始终是1。大家可以 用FOR循环试试。
      

  8.   

    道理是这样的,不过在不同的编程环镜下得到有结果是不同的哦
    就像TC中结果是3
    而在JAVA里就是2了,这又是什么原因呢
      

  9.   

    JAVA中遇到类似(...+ sum++ +...)等表达式的时候
    如果后面的省略号部分没出现sum,那么最后一次的sum++会等到()运算结束之后进行自加
    如果后面的省略号部分出现了sum,那么最后一次的sum++会在使用sum之前进行,也就在()之前进行了
    这个与c/c++不一样,在c/c++中,sum++一定在其后面的+之前进行自加,也就一定在()结束之前进行所以可以总结为:
    JAVA中的后置++运算符并不是在取置之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。
    C/C++中的后置++运算符是在取置之后立即进行。于是,可以得到下面的运算结果:
              int sum=1;
    JAVA      sum+(sum++)=2           sum+(sum+++sum)=4
    C/C++     sum+(sum++)=3           sum+(sum+++sum)=4
      

  10.   

    不好意思,有错别字:p
    JAVA中的后置++运算符并不是在取值之后立即进行,而是在表达式运算完毕或者最后一次使用该目标数之前进行。
    C/C++中的后置++运算符是在取值之后立即进行。