public class Main{
public void a(){
int i=9; //之所以用9,不用0或者1是为了区别索引值。
int j=i;
}
public void b(){
int i=9;
int j=i++;
}
public void c(){
int i=9;
int j=++i;
}
}
这段代码编译后 javap -c Main.class 然后会生成
Compiled from "Main.java"
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void a();
Code:
0: bipush 9 //将常量9压入栈顶。
2: istore_1 //将栈顶元素弹出到本地局部变量第一个。也就是把9赋值给i。
3: iload_1//把本地局部变量压入栈顶。
4: istore_2//把栈顶元素弹出到本地局部变量第二个也就是j。
5: return
public void b();
Code:
0: bipush 9 //将常量9压入栈顶。
2: istore_1//将栈顶元素弹出到本地局部变量第一个。也就是把9赋值给i。
3: iload_1//把本地局部变量压入栈顶。
4: iinc 1, 1//对本地第1个局部变量进行加1操作。也就是把i变成了10.
7: istore_2//把栈顶元素弹出到本地局部变量第二个也就是j。
8: return
public void c();
Code:
0: bipush 9 //将常量9压入栈顶。
2: istore_1/将栈顶元素弹出到本地局部变量第一个。也就是把9赋值给i。
3: iinc 1, 1//对本地第1个局部变量进行加1操作。也就是把i变成了10.
6: iload_1//把本地局部变量压入栈顶。也就是10压入栈顶。
7: istore_2//把栈顶元素弹出到本地局部变量第二个也就是j。
8: return
}
图解i++和++i
最新推荐文章于 2022-01-07 11:45:00 发布