当前位置: 代码迷 >> J2SE >> ++有关问题
  详细解决方案

++有关问题

热度:8   发布时间:2016-04-23 20:33:44.0
++问题
public class TestJ {

public static void main(String[] args) {
int j = 0;
        for (int i = 0; i < 10; i++) {
             j = j++;
            System.out.println(j);
        }

}

}

输出结果
0
0
0
0
0
0
0
0
0

不是应该先是j = j然后j自增吗?但是输出结果....
------解决方案--------------------
我应该感谢扔板砖的  因为他至少看了一下我发的帖子

至于其他的人  好像连看都没有看

我明白了一个道理 :倾听 好像 比 诉说 更有意义


关于论据 ,我没有 。不过 我可以直接给你答案 :



import java.util.Scanner;

public class java {

    public static void main(String [] args){
    int j = 0;
    j = j++ + 5 - 3 - 2  ;
    System.out.println(j);}
}

Compiled from "java.java"   用javap -c java.class 得到字节码
public class java {
  public java();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        
    LineNumberTable:
      line 4: 0

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0          // 常量0  压入操作数栈
       1: istore_1           // 保存到局部变量
       2: iload_1            // 将局部变量的值  压入操作数栈 (应该可以猜到 上面的 store 会弹出栈)
       3: iinc          1, 1   // 关键的就是这一句  我也不知道是什么意思
                                     //(可以看看 虚拟机规范  可以猜到的是 他不会改变栈 但是能改变局部变量)
       6: iconst_5      
       7: iadd           // + 5
       8: iconst_3      
       9: isub          // -3
      10: iconst_2      
      11: isub          //-2
      12: istore_1    // j = 表达式  下面的就是调用 println  了
      13: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      16: iload_1       
      17: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
      20: return        
    LineNumberTable:
      line 7: 0
      line 8: 2
      line 9: 13
}
  相关解决方案