java中的 i++ 和++i
2016-06-12 00:00
295 查看
摘要: 记得老师说过一句特别深刻的一句话:”++在后是先赋值后加1,++在后是先加1后赋值“,但是遇到了一个下面的代码,我怀疑是不是理解错了
记得老师说过一句特别深刻的一句话:”++在后是先赋值后加1,++在后是先加1后赋值“,但是遇到了一个下面的代码,我怀疑是不是理解错了:
这个程序输出的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 ++ 可以换成这样的程序理解
于是第一次循环后count的值还是0,其他9次循环也是一样,最终你会发现count的值始终没有变化,始终保存着最初的状态!
记得老师说过一句特别深刻的一句话:”++在后是先赋值后加1,++在后是先加1后赋值“,但是遇到了一个下面的代码,我怀疑是不是理解错了:
public class Client{ 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的值始终没有变化,始终保存着最初的状态!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树