首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

i=++i+i++; 。解决办法

2012-04-28 
i++i+i++ 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。Java codepublic static void main(String[] a

i=++i+i++; 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Java code
public static void main(String[] args) {        int i = 0;        i=++i+i++;        System.out.println(i);    }


执行顺序是先i++后++i么?如果是,i++之后,在++i时的值是变化后的值么??

[解决办法]
先执行++i吧?
[解决办法]
这种问题,其实运行下javap -c 类名就立马知道原因了
[解决办法]
int i = 0;
int k=++i;
int m=i++;
i=k+m;
这样是不是更容易理解些
[解决办法]
最好不要玩这样的代码。。这样的代码可读性太差。。如果你知道怎么来执行 最好使用括号来实现
[解决办法]
先++i,后i++ 然后两个相加赋值给i 结果是2吧
[解决办法]
Java code
public class a extends java.lang.Object{public a();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V   4:   returnpublic static void main(java.lang.String[]);  Code:                        //【】表示栈,栈顶在最左端   0:   iconst_0               //常量0入栈,栈中内容为【0】   1:   istore_1               //从栈顶弹出一个int,存到局部变量区索引为1的变量中,即局部变量区索引为1的变量值为0,此时栈中内容为【】   2:   iinc   1, 1           //局部变量区索引为1的的变量加1,即局部变量区索引为1的的变量此时值为1,栈中内容为【】   5:   iload_1                //将局部变量区索引为1的变量值入栈,栈中内容为【1】   6:   iload_1                //将局部变量区索引为1的变量值入栈,栈中内容为【1,1】   7:   iinc    1, 1           //局部变量区索引为1的的变量加1,即局部变量区索引为1的的变量此时值为2,栈中内容为【1,1】   10:  iadd                   //从栈顶弹出两个int值,即上面栈中的两个1,相加,再将结果入栈,此时栈中的内容【2】   11:  istore_1               //从栈顶弹出一个int,即上面栈中的2,保存到局部变量区索引为1的变量中,即局部变量区索引为1的变量值此时为2,此时栈中的内容为【】   12:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;以下是打印局部变量区索引为1的变量值   15:  iload_1   16:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V   19:  return}
[解决办法]
探讨
Java code

public class a extends java.lang.Object{
public a();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return

public static void m……

[解决办法]
探讨

引用:
Java code

public class a extends java.lang.Object{
public a();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return

public static vo……

[解决办法]
i=0
i=++i+i++
++i 表示先运算后赋值 所以++i 整体为1 ,然后把值赋给i ,所以i=1
i++ 表示先赋值后运算 因为i已经等于1了,所以i++为1,此时i=1;

最终的结果一个就是(++i)+(i++)=2
[解决办法]
可見其中一個++是待兩操作數都入棧之後才加的,對加法結果沒有影響
而這個后加的若沒猜錯應該是i++,可以通過程序再驗證一下:

Java code
public class Test {        public static void main(String[] args) throws Exception {                int i = 0;        i=i+++1;        System.out.println(i);                   }}
[解决办法]
在表达式用使用前++是 变量先+1在在表达式中使用,
在表达式中使用后++是 先在表达式中使用在进行+1,
例如:
int i = 0;
int j = ++i; //这个时候先+在用 j = 1; i = 1; 
int k = i++; //这个时候先用再+ k = 1; i = 2;

所以你的 i = ++i + i++;中先做了一次++操作i变为1 然后做 i + i 的操作为2,然后又做了一次 ++的操作这个是后i的值为2, 然后再把表达式的值赋值给i即2.这个时候有是回混, 你可以吧i的初始值设为3,你可以看到结果i是8了。

热点排行