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
}