就是想问一下它运行时候到底是怎么做的

解决方案 »

  1.   

    int i=0;p=(i++)+(i++);
    第一个i++为0 之后i=1
    第二个i++为1 之后i=2
    i++先用i运算,然后i=i+1;
    ++i先把i=i+1,再运算
      

  2.   

    这样写p=(++i)+(i++);
    因为i初始值是0的缘故
      

  3.   

    如果int i=0时; p=i++; 是先赋值,后i在自加  所以结果是p=0,i=1;然后看,p=(i++)+(i++) ,即第一个(i++)时,i=1,再运行第二个(i++)时,i已经为1,是先把i赋给p,然后再自加1,所以p=1,i=2
      

  4.   

    ++的优先级是高于+所以就是执行1.i++=0,i=1;
                2.i++=1,i=2;
                3.()+()=1;
      

  5.   

    int i=0;p=(i++)+(i++);输出p是1,为什么? 
    ======================================================
    我觉得是这样的:
    首先,第 初值为 0
    先计算括号头的
    从左向右运算:第一个()计算后i自增.变为 1
    再运算第二个括号 
    所以 p=0+1=1
      

  6.   

    p的值为1   但是值赋给P后i已经为2了
    int i=0;p=(i++)+(i++);
    第一个i++为0 之后i=1
    第二个i++为1 之后i=2
    i++先用i运算,然后i=i+1;
    ++i先把i=i+1,再运算
      

  7.   

    我同意楼上的说法
    第一个括号(i++)=0,然后i=i+1;i变为1
    第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p
    所以p最后结果为1;
      

  8.   

    第一个 i++ 先取 i 来运算,此时 i=0,再做++,这时i=1
    第二个 i++ 也i出来运算,i = 1, p = 0 + 1 = 1,i 再做++,这时i=2
      

  9.   

    我同意楼上的说法
    第一个括号(i++)=0,然后i=i+1;i变为1
    第二个括号(i++)=1,然后i=i+1;之后0+1赋值给p
    所以p最后结果为1;
      

  10.   

    其实我们就是想多了
    i++就是先计算再进行自加运算
    ++i就是先进行自加然后计算
    int i;
    p=(i++); //这里的p=0;   此时的i=1;
    p=(i++)+(i++);//这里的p=2;
      

  11.   

    在C里面当i初始化为0,P=(i++)+(i++)执行后的结果是: p的值为0,i的值为2.原因是因为在C里,它的编译器把程序编译后的执行顺序为先执行+操作.然后再对i执行两次++操作.
    而在JAVA里面我也写了一个测试程序看过了,结果是p的值为1,i的值为2.我想这也应该是与JAVA的编译器有关的问题吧.因为编译器在处理这种表达式的时候都是使用堆栈完成的.至于其进栈和出栈顺序是由JAVA编译器来决定的.大家不要猜测.要用事实说话.去sun网站的论坛里问一下吧
      

  12.   

    如果int i=0时; p=i++; 是先赋值,后i在自加 所以结果是p=0,i=1;然后看,p=(i++)+(i++) ,即第一个(i++)时,i=1,再运行第二个(i++)时,i已经为1,是先把i赋给p,然后再自加1,所以p=1,i=2
      

  13.   

    上面没有一个说对的, 
     ④   ②   ③   ①
    p =  (i++)  +  (i++) 这里要考虑运算符的优先级和各个运算符的结合性.
    首先优先级++ > + > =  其次++是右结合性 +是左结合,= 是右结合 所以计算顺序为图所示:
    ①式(i++)=0; i=1
    ②式(i++)=1; i=2
    ③加 0+1=1;  i=2
    ④赋值p=1;  i=2  
    这种小技巧考试有用,编软件用不上的
      

  14.   

    编译器的特性,这个在C++(VC6.0)结果是0,JAVA(JDK1.5)结果是1
      

  15.   

    没发现java的执行和在不同的编译器有多大的差异,大家有过这种例子吗?
      

  16.   

    追究这些没有意义,写代码的时候,要避免写出这种不确定的代码。这种代码,可能随 Java/C++ 而不同,可能随不同 jdk 厂商而不同,甚至有可能不同 jdk 版本而不同。因此,要避免写出这种代码,更没有必要去深究。
      

  17.   

    public class P{
    public static void main(String args[]){
    int i=0;
    int p=i+++(i++);
    System.out.println("i="+i+"p="+p);
    }
    }
    //i=2p=1
      

  18.   

    int i=0;
    p=(i++)/*i=0*/ +(i++)/*i=1*/;
    p=1;
      

  19.   

    (i++)+(i++)这个表达式是从左到右进行计算的,第一个i=0,然后i++,i就等于1了;p=0+1;然后I++,i=2