`

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

    Java循环的一个小问题,java中for(int i= 0; i&lt;=10;i=i++)System.out.print(i);为什么无限输出0

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

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

    java 经典程序50道

    System.out.println("1到1000的完数有: "); for(int i=1; i; i++) { int t = 0; for(int j=1; j&lt;= i/2; j++) { if(i % j == 0) { t = t + j; } } if(t == i) { System.out.print(i + " "); } }} 【程序...

    非常经典的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 ...

    谈谈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习题及实验-电子工业大学出版!

    习题01 Java概述 public class Sum10_for { public static void main(String args[]) { int i=1,n=10,s=0;... System.out.println(i+" = "+(s+i)); } } 程序运行结果如下:Sum(10) = 1+2+3+4+5+6+7+8+9+10 = 55

    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(int i=0;i&lt;goodsTotalNum;i++) { System.out.println("********************第"+(i+1)+"件货物:"); System.out.println("goodsID="+goodsID[i]); System.out.println("goodsName="+goodsName[i]); ...

    java反射例子

    System.out.println("实现的接口 :"+inters[i].getName()); } Class&lt;?&gt; sup=clazz.getSuperclass(); System.out.println("继承的父类:"+sup.getName()); //方法一 Constructor[] constructor=...

    简单的JAVA程序.

    System.out.println("★★★★★★★★欢迎使用万年历★★★★★★★★"); System.out.println("请输入年:"); int nian = input.nextInt(); System.out.println("请输入月:"); int yue = ...

Global site tag (gtag.js) - Google Analytics