public class Test1 {
public static void main(String args[]) {
// int a=10;
int b=10;
int c=a;
int a=10;
int b=10;
int c=a++;
int d=++b;
System.out.println("c="+c);
System.out.println("d="+d);
}
}
结果:
c=10
d=11
感觉确实很难理解为什么结果不一样,可能是我很久没写java的缘故。
1.从jvm方面
对应内存结构
添加一个变量c
内存模型的改变
程序改写1
public class Test1 {
public static void main(String args[]) {
int a=10;
int b=10;
int c=a++;
}
}
程序改写2
public class Test1 {
public static void main(String args[]) {
int a=10;
int b=10;
int c=++a;
}
}
区别就在于iload_1和iinc的先后顺序,
第一段程序:iload_1表示把变量a的值加载给c,iinc表示a的值直接+1,很明显在第一段程序中iinc对于int c=a++没有意义了,当iload_1加载a值给c,此时再进行a=a+1的操作c的值必然为原值。
int c=a++等于int c=a;a=a+1;
第二段程序:iinc直接执行在a原值基础上加1操作,int c=++a等于a=a+1(iinc);int c=a(iload_1);
其实讲到这里可能还是很难理解。或许你可以把a++和++a理解为int c=a;a=a+1;和a=a+1(iinc);int c=a(iload_1);只是编译器把代码简化了,底层还是需要一个翻译的过程,仅此而已。
人生有风雨,平凡的生活更加美好,普通人经不起折腾。