在java中为什么 int i=6; i=i++; System.out.print(i); i的输出值是6而不是7呢?
看了所有我能看懂的楼.感觉你们说的意思是i=i++中"="的优先级大于"++"的级别是吧?如果是,那为什么我输入i=(i++)的时候输出值还是6呢.?如果我的理解有错误,...
看了所有我能看懂的楼. 感觉你们说的意思是i=i++中"="的优先级大于"++"的级别是吧?
如果是, 那为什么我输入i=(i++)的时候输出值还是6呢.? 如果我的理解有错误, 请更正. 谢谢. !
我是新手. 希望各位说的白一点. 能让我看懂.. 谢谢.! 展开
如果是, 那为什么我输入i=(i++)的时候输出值还是6呢.? 如果我的理解有错误, 请更正. 谢谢. !
我是新手. 希望各位说的白一点. 能让我看懂.. 谢谢.! 展开
展开全部
i++ 和 ++i
如果她们在表达式中的意思是: i++的意思是 先赋值后加1 ++i则是先加1再赋值 ++在前就先加1 ++在后就后加1
如果单独给出,不是表达式形式的都是加1没有什么先不先赋值了 就等于是自加1. 如: int i = 6; i++; System.out.println(i); 这里输出的就是7
希望能帮助到你!
如果她们在表达式中的意思是: i++的意思是 先赋值后加1 ++i则是先加1再赋值 ++在前就先加1 ++在后就后加1
如果单独给出,不是表达式形式的都是加1没有什么先不先赋值了 就等于是自加1. 如: int i = 6; i++; System.out.println(i); 这里输出的就是7
希望能帮助到你!
追问
你说的是i=i++中"="的优先级大于"++"的级别是吧?
如果是, 那为什么我输入i=(i++)的时候输出值还是6呢.? 如果我的理解有错误, 请更正. 谢谢. !
追答
++的优先级比 = 要高. 优先级1比2高 以此类推
在int i = i++中是表达i++的意思是 先赋值后加1 ++i则是先加1再赋值 ++在前就先加1 ++在后就后加1
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 > >>> 从左向右
6 >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 = += -= *= /= %= &= |= ^= ~= >= >>>= 从右向左
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好!
输出的结果的确是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."<init>":()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
}
输出的结果的确是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."<init>":()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
}
参考资料: http://blog.sina.com.cn/s/blog_5974b76a0100blzc.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
i++代表的含义是先输出i的值然后再加1
而++i代表的含义是先加1再输出i的值!
而++i代表的含义是先加1再输出i的值!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也不明白,楼上两位说的都对但不能解释出来为什么,就算是先运算i=i;但是还有i++不时也运算了吗,这个时候i就是7啊?怎么会是6呐,我运行一下确实是6,就解释。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询