您的位置:首页 > 编程语言 > Java开发

java中i=i++ 值无变化原因详解

2010-04-05 14:52 155 查看
想要弄明白JAVA中i=i++没变化的原因,就要了解JAVA虚拟机的”栈“先进后出的运行机制

以下面的代码为例:

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

在DOS中运行javap -c(JDK自带反编译器,-c表示显示方法中具体的字节码)

E:/>javac AddOperatorTest.java

E:/>java AddOperatorTest
0

E:/>javap -c AddOperatorTest
Compiled from "AddOperatorTest.java"
public class AddOperatorTest extends java.lang.Object{
public AddOperatorTest();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_0 //0进栈
1: istore_1 //把栈顶元素(即上一步的0)出栈,放到#1
2: iload_1 //i的值(0)进栈
3: iinc 1, 1 //#1加1,(注意:这里是#1加1而不是i加1)

6: istore_1 ///把栈顶元素(第二步的0)出栈,放到#1,这时#1又改为了0
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1 //i的值(0)进栈
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return

}

从上面可以看到,所谓的i++是指#1+1,而不是i+1,所以i还是原来的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: