int a = 1;
a = a ++;
System.out.println(a);为什么输出的结果还是1 而不是2呢 请高人解答
a = a ++;
System.out.println(a);为什么输出的结果还是1 而不是2呢 请高人解答
解决方案 »
- java与QQ的那点事
- 望各位大虾帮帮小弟这个java问题
- vector问题求教
- 学习java快两个月了,就是觉得什么也不会,愁死我了
- 感觉23种设计模式在b/s开发中好象用不到...
- ECLIPSE3.2+TOMCAT5.0配置好以后,JSP标签不能使用,请高手进来看看,帮帮我!
- 哪位大侠知道如何使用JfreeChart画出像MS Project2003中的甘特图?特别是那些竖线.
- 在两个线程中,怎样操作同一个ArrayList,并且一个线程访问ArrayList时,另一个线程不能访问?在线等
- 如何使用链表设计一个Collection的实现(急需!!!分不够再加)
- 关于java虚拟机
- 如何在一个类使用另外一个类的变量?
- 关于网络编程中的NullPointer异常
temp=i; i=temp+1;
return temp;
int a = 1;
a = a ++;
System.out.println(a); 执行上面代码 控制台输出a的值是 1 而按照正常的理解a的值应该是2
请解释原理
你的代码其实相当于如下代码:
int a=1;
a=a++;等价于:
int t;
t=a;//先将a的值暂存
a=a+1;//然后a的值加1
a=t;//最后用原先暂存的t来取代码a++
先得到a 然后给a+1++a
先+1 再得到a
a=a++;
是把a++又赋值给a了
问a的值是多少
这个表达式拆开来看可以理解成:
1.a=a
2.a+1
注意,上面的a赋值为a先执行,然后赋值完成后的表达式执行,但是此时2执行的a+1并没有再次被赋值给a,所以a的值还是为1.a=++a;
这个语句其实是有语法错误的,因为该语句中对a的赋值无效.执行过程如下:
1.a=a+1
2.a=a
在2中a=a其实是无效的,相当于只执行了a=a+1
先进行赋值,再把a的值++,
那就错了。恰恰是先进行++运算,再进行赋值运算的
while((temp = io.readLine()) != null)
temp = io.readLine()虽然是一个赋值语句,但它作为一个表达式也是有值的。而它的值就是表达式左边的值。同样,a++也是一个表达式,java规定这个表达式的值是a在进行运算之前的值。
java还规定赋值语句是先计算右边的值,再赋值给左边。
所以先执行了a++。
执行完之后,再执行a=1[1就是a++这个表达式的值]。
int a = 1;
a ++;
System.out.println(a);
或者这样:int a = 1;
a ++;
a = a++;
System.out.println(a); 输出时2.
刚浏览了下一位老大的博客,第一篇就是
http://blog.csdn.net/jFresH_MaN/archive/2005/03/27/332103.aspx楼主看看吧
a=a++ Java先入栈 在做++ 在出栈给a 所以a仍是以前的值
而C中 先a++ 在入栈 在出栈给a a就是++后的值了
i = (i++) + (i++) + (i++);
System.out.println(i);
这个输出结果是3。但是不是因为i进行了3次++运算得到的,而是最后的赋值.i = (i++) + (i++) + (i++);相当于:i = 0 + 1 + 2 =3.仔细思考下吧。
a = a ++;//先给a赋值为a,然后再做自加运算
System.out.println(a);
其实System.out.println(a++);与a=a++类似
但System.out.println(a++)这不难理解