http://topic.csdn.net/u/20081222/10/aead0637-2142-4867-90db-413e203c4f09.html
int x =1; 
int j=(x++)+(x++)+(x++); Java中j为6,LCC中为6 
Turbo C中为3. 
请问,其他的C编译器中,j为多少?
*************************************************
3和6,那一个理解起来比较自然?
(实际编程中避免该用法。)

解决方案 »

  1.   

    在java中
    int x =1;     
    int j=(x++)
    int j=1;
    int x =1;     
    int j=(x++)+(x++);
    int j=2+1;
    int x =1;     
    int j=(x++)+(x++)+(x++);
    int j=3+2+1;
    int x =1;     
    int j=(x++)+(x++)+(x++)+(x++);
    int j=4+3+2+1;
    依次类推,明白否???
      

  2.   


    错,与c不同,java规定了表达式的操作顺序是从左到右,
    所以 int j = 1+2+3+4;才对
      

  3.   


    理论:编程逻辑和编译器实现是否相关?理论上是否应该无关?学习Java是否应该深入理解JVM?
    实践:实际编程中避免该用法。:) 
      

  4.   

    这个在很多情况下都为3,因为把i++看做一个变量,上面的J就为:
    j=a+b+c
    并且i++来说,a=i++第一次使用时为a=i,然后才+1
    所以就为3咯。
      

  5.   

    我也问过这个问题 前家家 后加加 在java 和 c中是不一样的
      

  6.   

    楼主有话说:
    1、不要讨论(x++)+(x++)+(x++)为什么等于3或者6;不要讨论不同的C编译器可以会给出不同的答案.
    谁都似乎知道的东西别说了。
    2、(实际编程中避免该用法。) 第一楼就强调了。不要“连看贴都不会”。3、Java中会和C语言中一样,出现“不同的编译器可以会给出不同的答案”的情况吗?
    如果不,感谢JLS和JVM规范;如果是,这个Java编译器是谁写的?
    **************************************
    4、Java编程中
    int j= x++ ;和int j= ++x;是常用的。5、真正懂了,再复杂的表达式也不难。x=1,
    j = (x++ )+(x++ )*(++x)+(--x)不就是1+2*4+3么。
    不要希望招聘时考官去考你x=1,int j= x++。(换位思考,假设你去考别人)
    他会考你j= (x++)+(++x);
      

  7.   

    JLS是个好东西,今天买入一本,好好研究下。