i=i++的过程分析

public static void main(String[] args)
    {
        int i=10;
        i=i++;
        System.out.println(i);//输出10
    }

    以上代码按通常想法,i先参与赋值预算,然后进行自增,结果应该是11,但实际的结果是10.

 

    以下通过对字节指令的分析来看看究竟是怎么回事:

   

   使用javap进行反编译:得到如下字节码:

   

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

public static void main(java.lang.String[]);
  Code:
   0:   bipush  10
   2:   istore_1
   3:   iload_1
   4:   iinc    1, 1
   7:   istore_1
   8:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   11:  iload_1
   12:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   15:  return

}

 

    对字节指令的说明:

 

Code:
   0:   bipush  10  	//将byte1(数据类型为byte)转换为int数据,然后将其压入栈
   2:   istore_1    	//从栈中弹出int类型值,将其存入位置为1的局部变量中,至此完成i=10
   3:   iload_1     	//将位置为1的int类型局部变量压入栈
   4:   iinc    1, 1	//局部变量自增1,栈里的数据没变,至此完成i++
   7:   istore_1	//从栈中弹出int类型值,将其存入位置为1的局部变量中,至此完成i=i++
	                //因为栈里的值没有变化过,所以i仍然是10
   8:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   11:  iload_1
   12:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   15:  return

 

    用图表示其过程:



 

 

    以上测试基于JDK1.6
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一行简单的计算机代码,使用了一个循环结构。其中,i 是一个变量,初始值为 0,每次循环增加 1,直到 i 不再小于或等于 5 为止。这段代码的作用可以是执行循环体内的操作,重复 6 次,直到循环结束。 ### 回答2: for循环是一种常用的循环结构,用于重复执行一段代码。我们可以通过for循环来控制一个变量的增量,并设置循环条件来决定循环的次数。 在给定的代码中,i的初始值为0,每次循环完成后,i的值会递增。循环条件是i小于等于5,也就是说,当i的值小于等于5时,循环会继续执行。当i的值大于5时,循环则会终止。 在每一次循环中,我们可以在花括号{}中编写需要重复执行的代码。通过i这个变量,我们可以在每一次循环中使用它的值进行不同的操作。 由于我们没有给出具体的代码内容,所以无法进一步分析循环内部的具体操作。但是可以确定的是,给定的循环会重复执行至少6次,直到i的值大于5为止。 总结起来,给定的代码使用for循环,通过控制i的增量和循环条件来控制循环的次数。每一次循环中,我们可以在花括号{}中编写具体的操作代码。这是一个基本的描述,具体执行的操作需要参考循环内的代码。 ### 回答3: for (i=0;i <=5;i++) 这是一个循环语句,用来重复执行一段代码,其中i从0开始,每次循环增加1,直到i达到5为止。 循环的执行过程如下: 1. 首先将i初始化为0。 2. 判断i是否小于等于5,如果满足条件,则执行循环体内的代码。 3. 执行循环体内的代码。 4. i增加1。 5. 重复步骤2到4,直到i不满足小于等于5的条件为止。 该循环会执行6次,因为当i等于5时仍然满足条件,会再执行一次循环体内的代码。在每次循环中,可以通过变量i的值来执行相应的操作。 例如,可以在循环体内输出i的值,可以通过i的值来访问数组的元素,也可以根据i的值做一些特定的判断和操作。 总之,该循环是一个简单的计数循环,可根据需要在循环体内做一些特定的操作,直到i达到指定的条件为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值