昨天看到下面这段代码,分享出来给大家看看,大家也可以讨论讨论。

   int i = 0;
  i = i++;
  System.out.println("i的值是 "+i);

  根据我们通常所知道的后自增先使用后增加的道理,i++在使用后i自身会增加一个数值,初始值为0时,自增后就是1,那么输出的结果应该是1.但实际上这题的结果却是0。

  这是因为jvm在处理i = i++时, 会建立一个临时变量来接收i++的的值,然后返回这个临时变量的值,返回的值再被等号左边的变量接收了,这样就是说i虽然自增了但是又被赋值了0,这样输出的结果自然就是0了。

  不妨我们用temp临时变量来接收i++的值,来看一下结果。

可以看到temp的结果就是0,也就是说赋值号右边传递过来的是i未自增前的值,这符合后自增运算符先使用后增加的原则,这时候我们再输出一下i的值。

i也的确自增了一个值,这样就好理解为什么i = i++中输出第一个i为什么是0了,因为i在自增后又被等式右边的值覆盖了。也就是说这里的i的值发生了三次变化,第一次是我们定义i = 0;第二次就是i自增后变成了1;第三次就是i又被0值覆盖了。

最新文章

  1. HDU 1051 Wooden Sticks
  2. 深入理解openstack网络架构(1)
  3. Android ADB 命令大全
  4. MVC自带的校验
  5. 关于app上页面和js的调试
  6. js跨域及解决方法
  7. SICP 习题(1.1,1.2,1.3,1.4)解题总结。
  8. phpexcl导出数据
  9. QQ空间魔力日志大全SduSRZ
  10. python+selenium 环境搭建以及元素定位
  11. 解决VS打开文件出现No EditorOptionDefinition export found for the given option name问题
  12. Js中this机制全解
  13. POJ 2796[UVA 1619] Feel Good
  14. zabbix通过简单命令监控elasticsearch集群状态
  15. 为 昂达 v891 安装上了 remix OS 了
  16. os 模块 和 os模块下的path模块
  17. UE4 C++ Tips
  18. 有关 Android Studio 重复引入包的问题和解决方案
  19. iOS:麦克风权限检测和获取
  20. 全局获取 (Activity)Context,实现全局弹出 Dialog

热门文章

  1. zepto animate
  2. pace.js原理简介
  3. 1.4.2.4. SAVING(Core Data 应用程序实践指南)
  4. 如何将php数组或者对象传递给javascript
  5. redhat6 + 11G RAC 双节点部署
  6. RMAN-06217: not connected to auxiliary database with a net service name
  7. Flex移动应用程序开发的技巧和窍门(三)
  8. lufylegend库 LGraphics绘制图片
  9. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
  10. Mac bash rc