首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个关于自增赋值的有关问题,求解释

2012-02-08 
一个关于自增赋值的问题,求解释原代码如下:int a 10a a++System.out.println(a)想请问大家,这里的a

一个关于自增赋值的问题,求解释
原代码如下:
int a = 10;
a = a++;
System.out.println(a);

想请问大家,这里的a为什么等于10,这可能是个很简单的问题,但还是希望知情的朋友能够仔细地把原理讲给在下听,因为实在有点想不通,谢谢!

[解决办法]

Java code
在我们Java基础中已经知道++ 是自增运算符,–是自减运算符。而且我们知道 i++ 和 ++i 是有区别的,前一个是先运行后自增,后一个是先自增后运算,我们还知道 ++的运算优先级很高,比+高,更比赋值运算符=高。那么你能回答出下面这道题中i的值是多少吗?view sourceprint?01 public class Test {  02     public static void main(String[] args) {  03    04         int i = 1;  05         i = i++;  06         i = i++ + ++i;  07         i = i++ + ++i + ++i;  08    09         System.out.println("i=" + i);  10     }  11 } 如果你的答案是17,那么你就可以不看本文了,否则的话还是有必要看一看的:第五行,i =i++;  i++表达式值是1,i的值是2,把i++表达式的值赋值给i,于是i的值又变成了1, OK我们知道第五行过后i的值是1;第六行,i = i++ + ++i; 从优先级上看,两个++优先级最高,+优先级次之,再然后是赋值运算符。两个++相比,第一个先执行。此时 i++ 表达式的值是1,i的值是2,然后再执行++i,++i表达式的值是3, i的值也是3; 然后运算+,1+3 =4,把4赋值给 i ;此时 i 的值是4;第七行,i++ 表达式的值是4,i的值是5++i 表达式的值是6,i的值是6++i 表达式的值是7,i的值是7i= 4+6+7 =17;
[解决办法]
y = y++;

执行的过程其实是:
int y = 10;
int t = y;
y++;
y = t;

[解决办法]
Java code
C:\Users\hp\Desktop\test\a\postfixincrement>type Test.javapublic class Test{        public static void main(String[] args){                int i = 0;                i = i++;        }}C:\Users\hp\Desktop\test\a\postfixincrement>javac Test.javaC:\Users\hp\Desktop\test\a\postfixincrement>javap -c TestCompiled from "Test.java"public class Test extends java.lang.Object{public Test();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V   4:   returnpublic static void main(java.lang.String[]);  Code:   0:   iconst_0   1:   istore_1     //完成变量显式初始化   2:   iload_1      //变量值进栈   3:   iinc    1, 1 //变量自增   6:   istore_1     //值出栈 完成赋值   7:   return}C:\Users\hp\Desktop\test\a\postfixincrement>type Test2.javapublic class Test2{        public static void main(String[] args){                int i = 0;                i++;        }}C:\Users\hp\Desktop\test\a\postfixincrement>javac Test2.javaC:\Users\hp\Desktop\test\a\postfixincrement>javap -c Test2Compiled from "Test2.java"public class Test2 extends java.lang.Object{public Test2();  Code:   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V   4:   returnpublic static void main(java.lang.String[]);  Code:   0:   iconst_0   1:   istore_1    //初始化   2:   iinc    1, 1//自增   5:   return} 

热点排行