JAVA中i=i++没变化的原因
来源:互联网 发布:广州城中村网络被承包 编辑:程序博客网 时间:2024/04/30 03:44
想要弄明白JAVA中i=i++没变化的原因,就要了解JAVA虚拟机的”栈“先进后出的运行机制
以下面的代码为例:
public class AddOperatorTest
{
public static void main(String[] args)
{
int i = 0;
i = i++;
System.out.println(i);
}
}
在cmd中运行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还是原来的值
- JAVA中i=i++没变化的原因
- java中i=i++ 值无变化原因详解
- Java在方法中数组间直接'="赋值没变化的原因
- java中i = i++的思考?
- java中i=i++的问题
- java中i=i++的问题
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java中 i=i++的解释
- java 中 i=i++ 的解释
- java中i++ 与 i=i++的区别
- 关于java中i++,++i和i++ + ++i的问题
- Java中i++,++i 和i= i+ 1的区别
- JAVA i=i++,i=i+1的误区
- i=i++表达式的值为什么没有变化?
- java 中关于i = i++; 的bug
- Java中对i = i++的解释
- QQREADERAC6E437A8C0A7173
- 设计模式感悟(部分)
- htons函数具体解释
- 常用的一些正则
- C#关键字 - is 和 as
- JAVA中i=i++没变化的原因
- asp.net分隔字符串
- JavaScript 面向对象程序设计-封装
- [精华] GDB基本用法
- VC常用几种界面库的选择
- 输入一自然数n,求组成n3的n个连续奇数
- 集群cpu使用率监控系统的简单实现(二)监控端的实现
- IIS限制,流量限制与CPU限制的对比
- WiFi设计原理(源码分析)