你知道java中 i=i++后i的值是多少么之一

 时间:2024-10-12 00:58:33

1、Java中i=i++后的值是多少呢?这个貌似简单的问题,暗藏玄机!是想考查运算符的优化级?还是自增运算呢?这个问题很难回答。既然从语法角度难回答,就会bytecode这个侧面来分析一下吧!下面示例代码的输出会是1,你信吗?现在我们就一块验证一下Show me the code.Code:package chapter4;/*** Created by MyWorld on 2016/3/17.*/public class IPlusPlusDemo { public static void main(String[] args) { int i = 1; i=i++; System.out.println(i); }}

你知道java中 i=i++后i的值是多少么之一

2、执行上面的代码,看看执行结果是什么。拭目以待。。。是1,为什么呢?++操作符的优化级高于=,因此先运算,i++后,i为2,然后再把2赋给i,最后i的值为2才对嘛。想不通。。。

你知道java中 i=i++后i的值是多少么之一

3、既然从语法角度想不能,那就换了角度,从烂瘀佐栾这个java文件生成的字节码文件来分析一下吧。说不定就豁然开朗了呢命令:jav锾攒揉敫ap -c IPlusPlusDemo.class执行结果:Compiled from "IPlusPlusDemo.java"public class chapter4.IPlusPlusDemo { public chapter4.IPlusPlusDemo(); 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_1 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1 7: getstatic #2 // Field java/lang/System.out:Ljavaio/PrintStream; 10: iload_1 11: invokevirtual #3 // Method java/io/PrintStream.printn:(I)V 14: return}

你知道java中 i=i++后i的值是多少么之一

4、int i = 1;i=i++;上面两步操作的bytecode是: 0: iconst_1 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1

你知道java中 i=i++后i的值是多少么之一

5、现在来分析一下这几句指令: 0: iconst_1 //把int型常量1push到栈中,即当前栈顶的值为1 1: istore_1 //pop栈顶的1给变量i。赋值操作(i=1) 2: iload_1 //push局部变量i的值1入栈,即当前栈顶的值为1 3: iinc 1, 1 //自增指令。变量i的值加1,执行完成后,i的值为2 6: istore_1 //pop栈顶的1赋给变量i。即变量i存放的值2被栈顶的元素覆盖,变为0

你知道java中 i=i++后i的值是多少么之一

6、现在明白了,为什么i的值没有变化了吧。原因就在于多了这两个指令 2: iload_1 6: istore_1

你知道java中 i=i++后i的值是多少么之一
  • Python编程:如何简单使用递归函数
  • 设A 为n 阶方阵,A不等于0 ,若A2次方-3A=0 .证明A-3E 不可逆.
  • Packet Tracer交换机划分Vlan配置
  • “行列式”的定义是什么
  • 如何摆脱对电脑的依懒?
  • 热门搜索
    六年级语文手抄报 关于诗的手抄报 教室节手抄报 推广普通话的手抄报 文明校园手抄报 清明节的手抄报三年级 爱眼手抄报内容 普通话手抄报文字内容 世界环境日手抄报 勿忘国耻振兴中华手抄报