public class Test {
public static void main (String arg[]){
int i1=10,i2=20;
int i= (i2++);//我的问题是在这,括号的优先级不是最高吗,难道不是先算(i2++)
System.out.print("i="+i);//然后复制给i么??主要是我觉的结果有点违背优先级
System.out.println("i2="+i2);
i = (++i2);
System.out.print("i="+i);
System.out.println("i2="+i2);
i = (--i1);
System.out.print("i="+i);
System.out.println("i2="+i1);
i = (i1--);
System.out.print("i="+i);
System.out.println("i2="+i1);
                                    
                                    }
                }先上代码 JAVA的 

解决方案 »

  1.   

    System.out.print("i="+i)   输出的i 是 20 不对吗?我觉得是楼主没有弄清 ++i 和 i++的区别吧 ++i 是先运算 i+1 然后把结果赋值给 i ,i ++ 是使用 i 然后再运算 i + 1回到你的题目中 int i= (i2++)  这里是先使用 i2 然后在运行 i2+1  所以 此时i的值是 i2的值  也就是20 ,如果改成i = (++i2) 那么i此时才是21  跟有没有括号是一样的
      

  2.   

    你是不是想问 为什么i++ 也就是i=i+1放在括号里,没有先运算,即i还是1,就参与到括号外的加法? 是这样的,是这个++位置问题,它一旦放在后面,就意味着,只有在当前的i使用完毕后,最后加1。这个逻辑比你的括号优先的逻辑还要高一层(当然喽,这都是编译系统的设计使然),所以系统一发现++在后,它就会先执行全部的运算,如下:
    a+a 加法
    b=a+a 赋值
    a=a+1
    a=a+1 a连续两次执行自增
    和你想要的,a自增1,然后求和,完全不同的结果了都。
    在ISO-C99 的表达式小节有讲解。
      

  3.   

    楼主要理解i++和++i代表的含义
    这里int i= (i2++); 加与不加括号是不影响的,都是一样,不加括号也是先运行i2++