`

int i=0; i=i++ System.out.Println(i)

阅读更多

 


  1. public
     class Test {   
  2.     public static void main(String[] args) {   
  3.         int i=0;   
  4.         i=i++;   
  5.         System.out.println(i);   
  6.     }   
  7. }  
  8. 结果是0
  9. 为什么是0 因为:
  10. 是因为Java编译器的原因:我们来看看编译后的字节码
  1. 0  iconst_0 //将int型0推送至栈顶 
    1  istore_1 //将栈顶int型数值存入第二个本地变量 i=0   (int i=0)
    2  iload_1 //将第二个int型本地变量推送至栈顶           然后将i推送至栈顶   0
    3  iinc 1 1 //将指定int型变量增加指定值(i++, i--, i+=2)完成i++
    4  istore_1 //将栈顶int型数值存入第二个本地变量        将栈元素赋值给了i    i=0
    5  getstatic java/lang/System/out Ljava/io/PrintStream;
    6  iload_1

    1.  public static void main(String[] args) {   
    2.         int i=0;   
    3.         i++;   
    4.         System.out.println(i);   
    5.     }  
    6. 字节码为:
    7. iconst_0 //将int型0推送至栈顶 
    8. istore_1 //将栈顶int型数值存入第二个本地变量 i=0   (int i=0)
    9. iinc 1 1 //将指定int型变量增加指定值(i++, i--, i+=2)完成i++
      1. public static void main(String[] args) {   
      2.         int i=0;   
      3.         int k=i++;   
      4.         System.out.println(i);   
      5.     }  
      6. 字节码为:
      7. 0  iconst_0 //将int型0推送至栈顶 
        1  istore_1 //将栈顶int型数值存入第二个本地变量 i=0   (int i=0)
        2  iload_1 //将第二个int型本地变量推送至栈顶           然后将i推送至栈顶   0
        3  iinc 1 1 //将指定int型变量增加指定值(i++, i--, i+=2)完成i++
        4  istore_2 //将栈顶int型数值存入第三个本地变量        将栈元素赋值给了i    i=0
        5  getstatic java/lang/System/out Ljava/io/PrintStream;
        6  iload_1
        1. public static void main(String[] args) {   
        2.         int i=0;   
        3.         int k=++i;   
        4.         System.out.println(i);   
        5.     }  
        6. 字节码为:
        7. 0 iconst_0
          1 istore_1
          2 iinc 1 by 1
          5 iload_1
          6 istore_2

  2. 对比而言,对于i++而言,i=i++指令多了两步,2和4
    其实这两步是赋值符号引起的,有意思的是第二步出现的时机,是在iinc之前,这就是因为java lang spec中规定的。
  3. java编译器对于++i 并不会生成2和4
  4. int i=0 i=i++ 或者 int i=0 int j= i++      相当于 int temp = i    i++   i=temp      int temp = i    i++   j=temp
  5. int i=0 i=++i   相当于 ++i  temp = i  i=temp;
  6. 总结:java编译器对于i++会先将i的值保存至另一变量 然后在对i++,另一变量仍没有改变。 而对于++i 是先对i++ 然后保存到另一变量 然后赋值。
分享到:
评论

相关推荐

    java中for(int i= 0; i<=10;i=i++)System.out.print(i);为什么无限输出0

    for (int i = 0; i &lt;= 10; i = i++) { System.out.print(i); } } } ``` 该代码定义了一个简单的`for`循环,其中循环变量`i`初始化为0,并且循环继续进行直到`i`大于或等于10。然而,在循环的更新表达式部分,...

    java代码-int i = 0; int s = (++i)+(i--)+i; System.out.println(s);

    System.out.println(s); ``` 1. 首先,`i`被初始化为0。执行`++i`时,`i`变为1,并返回1(预增操作)。 2. 接下来,计算`(i--)`。由于这发生在括号内,它会先执行。此时`i`的值为1,所以返回1,然后`i`减1变为0(后...

    Java经典算法20题

    System.out.println(fibonacci(i)); } } public static int fibonacci(int n) { if (n == 1 || n == 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } } ``` **注意**: 上述...

    求1+2!+3!+......+20! 1+1/2!+1/3!+.....1/20!

    最后,我们使用 System.out.println() 函数来输出计算结果。 阶乘在实践中的应用 阶乘在数学和计算机科学中有着广泛的应用,例如: * 组合数学:阶乘用于计算组合数和排列数。 * 概率论:阶乘用于计算概率事件的...

    非常经典的java一道题

    for (int i = 0; i &lt;= 5; i++) { for (int k = 0; k &lt;= 7 - i; k++) { System.out.print(" "); } for (int z = 1; z &lt;= 2 * i - 1; z++) { System.out.print("*"); } System.out.println(); } for (int i ...

    i = i++ 代码分析

    System.out.println(i); ``` 乍看之下,人们可能会认为输出结果是 1,但实际上输出结果是 0。这是为什么呢? 为了弄清楚这个问题,让我们看一下反编译后的代码: ```java iconst_0 istore_1 iload_1 iinc 1, 1 ...

    谈谈Java中的i++

    System.out.println("i的值是 : " + i); 这是和JVM的内存分配有关,JVM在处理这段带代码时,会先把i++的结果赋值给一个临时变量temp,然后再将这个临时变量的值赋值给i。即如下: int i = 0; int temp; // i = i...

    java简易计算器

    System.out.println(i+"+"+j+"="+c.add()); System.out.println(i+"-"+j+"="+c.dec()); System.out.println(i+"*"+j+"="+c.mul()); System.out.println(i+"/"+j+"="+c.div()); Scanner str=new Scanner(System....

    java 万年历程序代码

    System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");//显示月历 for(int i=0;i;i++) System.out.print("\t"); for(int i=1;i&lt;=days;i++) { System.out.print(i+"\t"); if((i-...

    java 小程序 学习

    System.out.println(y);*/ //System.out.println("y="+'y'+1); /*char x='c'; System.out.println(x); char ch=97; System.out.println(ch);*/ /*for(int i=0;i;i++) { for(int j=0;j;j++) { ...

    循环老师讲的代码

    System.out.println("执行"+i); if(i==5){ break;//终止整个for循环. } } //continue的使用 for(int i=1;i&lt;=10;i++){ if(i==5||i==7){ continue;//终止的是循环体中某一次循环。 } ...

    java培训教程教学课件

    System.out.println("x"+i+" is "+x[i]); } } } 《Java就业培训教程》P73源码 程序清单:TestArrayCopy.java public class TestArrayCopy { public static void main(String [] args) { int ia[]=new ...

    Java各章习题

    j&lt;=i;j++) System.out.print(" "+i*j); System.out.println(); } } } 解:程序的功能是:输出九九乘法表。 // 注:这一步得3分 结果如下图: // 注:这一步得7分 4) public class Sum{ public static void ...

    操作系统Java实现SJF代码

    System.out.println("时刻"+p[i].startTime+": 进程"+p[i].pid+"开始运行,完成时间为:"+p[i].finishTime+",周转时间为:"+p[i].WholeTime); sumWT+=p[i].WholeTime; } AverageWT=sumWT/p.length; System....

    最新JAVA编程题全集_50题及答案

    System.out.println("第" + i +"个月的兔子对数: "+f2); }}} 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则...

    经典java组合算法源码--TryCombination(算法源码)

    intArray[i]=i+1; } System.out.println("对整数数组进行组合:C(4,4)"); Combination intCombination1=new Combination(intArray.length); while(intCombination1.hasMore()){ int[] index=...

    import java.io.*; public class FirstPart{ public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int f = Integer.parseInt(br.re

    import java.io.*; public class FirstPart{ public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is ");...System.out.println("Changing it to Celsius is "+c); } }

    扑克牌代码实现

    System.out.print(GameRule.Num2Pai((int) jia.get(i))+" "); } System.out.println(); for (int i = 0; i &lt; yi.size(); i++) { System.out.print(GameRule.Num2Pai((int) yi.get(i))+" "); } } }

    JAVA练习题(for循环练习题等)

    System.out.println((char) ('a' + i) + ": " + count[i]); } ``` #### 8. 计算序列值 计算序列`s=a+aa+aaa+aaaa+aaaaa`的值,其中`a`为某个数字。例如当`a=2`时,序列值为`2+22+222+2222+22222`。 ```java int a...

    Java实现仓库管理

    for(int i=0;i&lt;goodsTotalNum;i++) { System.out.println("********************第"+(i+1)+"件货物:"); System.out.println("goodsID="+goodsID[i]); System.out.println("goodsName="+goodsName[i]); ...

Global site tag (gtag.js) - Google Analytics