java 中 i=i++ 的解释
来源:互联网 发布:chrome网络商店 编辑:程序博客网 时间:2024/05/16 09:15
在练习的时候发现了这样一个问题:源于java中的i=i++运行原理
public class MyTest { public static void main(String[] args) { int count = 0; for (int i = 0; i < 10; i++) { count = count++; } System.out.println("count=" + count); }}
这个程序输出的count等于几?是count自加10次吗?答案等于10?可以非常肯定地告诉你,答案错误!运行结果是count等于0。为什么呢? count++是一个表达式,是有返回值的,它的返回值就是count自加前的值。
Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。程序第一次循环时的详细处理步骤如下: 步骤1 JVM把count值(其值是0)拷贝到临时变量区。 步骤2 count值加1,这时候count的值是1。 步骤3 返回临时变量区的值,注意这个值是0,没修改过。 步骤4 返回值赋值给count,此时count值被重置成0。
“count=count++”这条语句可以按照如下代码来理解:
public static int mockAdd(int count){ //先保存初始值 int temp =count; //做自增操作 count = count+1; //返回原始值 return temp; }
于是第一次循环后count的值还是0,其他9次的循环也是一样的,最终你会发现count的值始终没有改变,仍然保持着最初的状态。
此例中代码作者的本意是希望count自增,所以想当然地认为赋值给自身就成了,不曾想掉到Java自增的陷阱中了。解决方法很简单,只要把 “count=count++”修改为“count++”即可。
该问题在不同的语言环境中有不同的实现:
C++中“count=count++”与“count++”是等效的,而在PHP中则保持着与Java相同的处理方式。每种语言对自增的实现方式各不 同,读者有兴趣可以多找几种语言测试一下,思考一下原理。
下次如果看到某人T恤上印着“i=i++”,千万不要鄙视他,记住,能够以不同的语言解释清楚这句话的人绝对不简单,应该表现出“如滔滔江水”般的敬仰,心理默念着“高人,绝世高人哪”。
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java中 i=i++的解释
- java 中 i=i++ 的解释
- Java中对i = i++的解释
- Java中关于i=i++的正确解释方法
- java中i++ ++i字节码解释
- C#中i=i++值不变的一个解释
- Java 语言中 关于 i=i++ 表达式的规范解释
- java中i = i++的思考?
- java中i=i++的问题
- java中i=i++的问题
- 解释:i=i++
- 解释:i=i++
- java中i++ 与 i=i++的区别
- 关于java中i++,++i和i++ + ++i的问题
- Java中i++,++i 和i= i+ 1的区别
- CSS-段落属性
- android异常收集错误信息并保存到crash文件夹下
- PHP查找字符串中的最长单词
- USACO09OCT
- win10下Python3兼容Python2安装
- java 中 i=i++ 的解释
- 安装Service2008+Sql2008问题汇总
- NotServingRegionException: Region is not online: .META.,,1
- Docker
- cornerstone 3 svn 报错 无法commit
- 奔向三张,不破不立:一个iOS开发工程师的职业规划思考(转自iOSer 逆,以资激励)
- PIC单片机的间接寻址注意要点
- 自整理 angular入门 ——打破高难度入门观念 (基础篇1)
- 27 在H5上实现spi-tft屏的简单驱动