黑马程序员技术交流社区

标题: 技术题 求讲解!!! [打印本页]

作者: 毕业生    时间: 2014-7-14 21:04
标题: 技术题 求讲解!!!
int  v4 = 0;
v4= v4++;
System.ouu.println("v4="+v4);
输出v4=0,求讲解原因!
作者: hejinzhong    时间: 2014-7-14 21:56
这个程序我只能这么解释,这个 i=i++ 中的两个i并不是一个i。你换个语言在验证下,结果不是上面打印的结果。我认为想要了解清楚这个过程,得在java中找到++运算符是怎么实现这个功能的,推断在内存中=左右两边的变量没在一个内存中,可能有形参之间的值传递。
作者: 张盼    时间: 2014-7-14 22:02
先将V4=0赋值给左边,然后再进行自增,所以打印的结果是0
作者: DSY    时间: 2014-7-14 22:07
有个小知识点   关于“前++”、“=”、”后++“,这三种运算的优先级排序是   
“前++”   >  “=”  >  “后++”   
  临时变量先得到v4原来地值是0,这时候考虑优先级,=大于后++,所以临时变量就执行赋值操作,之后临时变量先读出v4地值,再进行++操作,但是++操作只是在临时变量自己身上加一,不会影响原来地v4值。
作者: 黎志勇    时间: 2014-7-14 22:09
v4= v4++;
先取值再自增,这个先取值其实是先把值暂存在一个临时变量中,整个过程可以理解为:
temp = v4; v4 = v4 +1; v4 = temp;
因为v4初始值是0,所以temp的值是0,最终v4的取值也是0。
作者: 毕业生    时间: 2014-7-14 22:12
以前学了些C++  用C 结果不是这个。现在转战Java 就变了,看到了,知道结果,但不知道原理!心里感觉不爽。
作者: 毕业生    时间: 2014-7-14 22:13
DSY 发表于 2014-7-14 22:07
有个小知识点   关于“前++”、“=”、”后++“,这三种运算的优先级排序是   
“前++”   >  “=”  >  “ ...

这种理解感觉应该正确!
作者: hjfeng1987    时间: 2014-7-14 22:28
黎志勇 发表于 2014-7-14 22:09
v4= v4++;
先取值再自增,这个先取值其实是先把值暂存在一个临时变量中,整个过程可以理解为:
temp = v4;  ...

这样容易理解
作者: 毕业生    时间: 2014-7-15 10:36
hjfeng1987 发表于 2014-7-14 22:28
这样容易理解

嗯嗯 这样理解就容易很多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2