int a = 1;
a = a ++;
System.out.println(a);为什么输出的结果还是1 而不是2呢 请高人解答
a = a ++;
System.out.println(a);为什么输出的结果还是1 而不是2呢 请高人解答
解决方案 »
- 请问张孝祥开的那个传智播客怎么样啊?我最近想去培训java.听说他那学完没什么证书。
- 请教一个读取加密文件内容的问题!
- 看看这个java Applet有什么问题
- 如何使用Java将Word文件转化成HTML, 同时尽可能保持格式不变。
- 如果文件里既有图片又有文字,怎么把它读到数据库里,又把它从数据库里拿出来显示呢?有相应的源代码吗
- 请教一个关于static的问题。
- 200分,怎样实现把任意输入的汉字转换为拼音全拼?
- 怎么使用类似vc++中的messagebox()一类的东西?
- 在公司做JAVA程序,大家认为最重要的是什么???
- 关于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++)这不难理解