日期:2014-05-20  浏览次数:20620 次

有个小问题搞不懂~~~大家帮看看 先谢谢了
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的

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


在ISO-C99 的表达式小节有讲解。
------解决方案--------------------
楼主要理解i++和++i代表的含义
这里int i= (i2++); 加与不加括号是不影响的,都是一样,不加括号也是先运行i2++