一个看着简单,但很难说清楚的问题

qingtian_zhen 2007-09-11 09:01:03

public class test
{
public static void main(String[] args)
{
int d=2;
d=++d;
System.out.println(d);
System.out.println(d);

}
}
输出3



public class test
{
public static void main(String[] args)
{
int d=2;
d=d++;
System.out.println(d);
System.out.println(d);

}
}
输出的是2 ,为什么不输出3 就因为先进行赋值运算,那d进行++操作得到的东西那里去了,希望会的能帮忙解答以下
...全文
185 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bushuang 2007-09-12
  • 打赏
  • 举报
回复
建议楼主你可以去看看编译以后的字节码
计算机是这样处理的

i++的情况
iconst_0
istore_1
iload_1
iinc 1,1
istore_1

++i的情况
iconst_0
istore_1
iinc 1,1
iload_1
istore_1


在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。
语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。
因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
又因为i = ++i;是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈,虽然最后执行了istore_1,但也只是将堆栈中的值(1)弹出赋给变量区的i,所以i = ++i;的结果是i = 1
  • 打赏
  • 举报
回复
回复人:Davis129(别信自己) ( 二级(初级)) 信誉:100 2007-9-11 21:25:55 得分:0

楼上的连接好象进不去

“载入样式表单出错: 分析 XSLT 样式表单失败。”??
______________________________________________________

哈哈,CSDN 针对 Firefox 的超级大 Bug。

http://community.csdn.net/Expert/topic/5738/5738096.xml?temp=.3480188

改成:

http://community.csdn.net/Expert/TopicView3.asp?id=5738096

就可以了。
Davis129 2007-09-12
  • 打赏
  • 举报
回复
to:qingtian_zhen(晴天) ( ) 信誉:100

d=2
dd=d++
system.out.println(d);
你觉得d=?
oyp254710980 2007-09-11
  • 打赏
  • 举报
回复
d=d++;

第一步:执行“d++”运算得d=3
第二歩:“d++”的值是2,d的值为3
第三步: 把“d++”(d的值为3,但d++的值为2)的值赋给d,得d为2(d由3变为2)

得出结论最终结果:d为2.
lulu3779 2007-09-11
  • 打赏
  • 举报
回复
++d 将d加一,把值付给d 所以的等于3
d++ 此时的d的值还没有变 所以d=2
qingtian_zhen 2007-09-11
  • 打赏
  • 举报
回复
楼上的你说的不对把,d++计算之后得到3 你给我获取以下
Davis129 2007-09-11
  • 打赏
  • 举报
回复
楼上的连接好象进不去

“载入样式表单出错: 分析 XSLT 样式表单失败。”??
Davis129 2007-09-11
  • 打赏
  • 举报
回复
d=d++
第一步:计算表达式"d++"的值是2
第二步:将表达式的值赋给d

一般是这样认识的 也许我们都认为d++的“++”是最后执行的
其实d++的“++”在计算完表达式就“=”之前先执行了!

“d++”:得到2
++:得到d=3
d=表达式:得到d=2
zephyr_cc 2007-09-11
  • 打赏
  • 举报
回复
看看这里
http://community.csdn.net/Expert/topic/5738/5738096.xml?temp=.3480188
二楼我回的那个
不重复写了...
qingtian_zhen 2007-09-11
  • 打赏
  • 举报
回复
给我自己顶一下 哈哈!!!!
javafreshfish 2007-09-11
  • 打赏
  • 举报
回复
对,现在才发现第二个代码d=d++的确不太明白呀!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧