在java中为什么 int i=6; i=i++; System.out.print(i); i的输出值是6而不是7呢?

2024-12-19 16:02:06
推荐回答(5个)
回答1:

i=i++ ;这个要想深入的理解,必须能看懂.class文件,也就是你能分析它内部的执行过程,在执行i=i++;时虚拟机先将i存放在了栈中,执行完后,仍然是从栈中直接取出,所以i的值是6。你可以网上搜一下这个题。道理一样。int i = 1 ;for(int j=0;j<1000;j++){i=i++;} 最后i的值还是1。道理是一样的。谢谢,希望对你有所帮助。

回答2:

i++ 和 ++i
如果她们在表达式中的意思是: i++的意思是 先赋值后加1 ++i则是先加1再赋值 ++在前就先加1 ++在后就后加1
如果单独给出,不是表达式形式的都是加1没有什么先不先赋值了 就等于是自加1. 如: int i = 6; i++; System.out.println(i); 这里输出的就是7

希望能帮助到你!

回答3:

你好!
输出的结果的确是6.
可以参看这篇文章:http://blog.sina.com.cn/s/blog_5974b76a0100blzc.html
以下是对你这段代码的虚拟机指令集.
~/test$ javap -c Main
Compiled from "Main.java"
public class javaapplication1.Main extends java.lang.Object{
public javaapplication1.Main();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."":()V
4: return

public static void main(java.lang.String[]);
Code:
0: bipush 6 //常数6入栈
2: istore_1 // i赋值,常数值出栈
//以上完成i=6;
3: iload_1 //装载变量i,6入栈
4: iinc 1, 1//变量值增加,栈内值不变
//以上完成i++,此时i为7
7: istore_1//i赋值,6出栈。
//此时完成i=i++, i值为6,
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: iload_1
12: invokevirtual #3; //Method java/io/PrintStream.print:(I)V
15: return

}

回答4:

i++代表的含义是先输出i的值然后再加1
而++i代表的含义是先加1再输出i的值!

回答5:

我也不明白,楼上两位说的都对但不能解释出来为什么,就算是先运算i=i;但是还有i++不时也运算了吗,这个时候i就是7啊?怎么会是6呐,我运行一下确实是6,就解释。