先来看一段程序:

public class Test1 {public static void main(String[] args) {int j = 0;for(int i = 0; i < 100; i++){j = j++;}System.out.println(j);}
}

程序的结果输出为0。这是为什么呢?
java编译器在遇到j++和j- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。下面首先看一下j=i++的情况:

接下来在看一下i=i++的情况:

结合上图我们解析到:
在这里JVM里面有两个存储区,一个是暂存区(以下称为堆栈),另一个是变量区。j=j++是先将j的值(0,原始值)存入堆栈中(对应图中分配一块新的内存空间),然后对变量区中j自加1,这时j的值确实是1,但随后将堆栈中的值赋给变量区的j,所以最后j=0;

而j=++j,是先对变量区中的j加1,再将变量区中的j值(1)存入堆栈,最后将堆栈中的值赋给自变量区的j,所以j=1;

总结: java使用了中间缓存变量的机制
对于j=j++可以换种写法:
temp=j;
j=j+1;
j=temp;
对于j=++j可以换种写法:
j=j+1;
temp=j;
j=temp;

java中j=j++和j=++j的理解相关推荐

  1. java中jmod是什么,modulo - j中mod的语法是什么

    modulo - j中mod的语法是什么 作为伪代码的一个例子: if ((a mod 2) == 0) { isEven = true; } else { isEven = false; } 15个 ...

  2. Java中? extends T和? super T的理解

    ? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...

  3. java中堆与栈的区别 彻底理解

    每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享.跟C/C++不同,Java中分配堆内存是自动初始 ...

  4. JAVA中关于set()和get()方法的理解及使用

    https://www.cnblogs.com/fly-sky-han/p/6564439.html 我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义, ...

  5. 一些简单的例子让你在Java中能更好的学习并理解循环结构(1)!

    一.java中流程控制方式采用三种基本流程结构:顺序结构,选择(分支)结构,循环结构. 1.[if-else 结构] if(1>2){ system.out.println("if条件 ...

  6. java中package(包)的使用理解

    最近在学习java,在学习到对象和类这一部分时,接触了java中很重要的一个概念:package,也就是包.一开始对于package的使用我产生了许多疑惑,不仅是理论上的,在实际写代码的尝试中也出现了 ...

  7. Java中的设计模式:“代理模式”的理解

    代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...

  8. Java中的字节流和字符流如何理解——精简

    目录 引言 字节流和字符流 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 引言 在完完全全的完成本学期的学习任务之后,终于可以有时间继续更新Java相关的文章了.那么今天我们要学习的 ...

  9. Java中final、finally、finalize的理解

    导航栏 一.基本理解 1.final的基础理解 2.finally的基础理解 3.finalize的基础理解 二.final使用案例 1.final对于变量的定义 1.在定义的时候初始化. 2.fin ...

  10. 简述java中的注释以及用法_怎样理解 Java 注解和运用注解编程?

    正好最近在公众号(BetterAndroid)发了一篇关于注解的文章,贴在这里吧,希望对题主有帮助. 一.什么是注解 我们都知道在Java代码中使用注释是为了提升代码的可读性,也就是说,注释是给人看的 ...

最新文章

  1. LTE Paging时频资源
  2. mac上使用crontab周期性执行python脚本
  3. python 访问网页 重定向_Python数据网络采集5--处理Javascript和重定向
  4. SAP MM 明明有需求,为啥MRP RUN后没有PR单据产生?
  5. python 持续集成部署_Jenkins部署git+python项目实现持续集成
  6. 利用JSP编程技术实现一个简单的购物车程序
  7. ios查看帧率的软件_【iOS测试】【随笔】帧率FPS评测
  8. cmos逻辑门传输延迟时间_02. 码制与逻辑运算
  9. md5加密算法c语言版
  10. Cadence Allegro怎么从2层板添加层到4层板
  11. 给Android程序员的一些面试建议
  12. String类型的测量长度
  13. Elsevier 投稿各种状态总结
  14. 读的, 且经过美化, 能在所有 JavaScript 环境中运行, 并且应该和对应手写的 JavaScript 一样快或者更快.
  15. JWT认证方式之-System.IdentityModel.Tokens.Jwt
  16. 感觉各种知道,问答,百科的真实性和可信性都被网络营销给搞坏了
  17. 从苹果官网细看20年设计变迁史
  18. 数据安全 | 黑产研究之拖库
  19. 《Cisco路由器配置与管理完全手册》(第二版)前言和目录
  20. 【Bug_驱动】ThinkPad鼠标和触摸板无法同时使用的解决方案

热门文章

  1. 计算机毕业设计Java后勤管理系统(源码+系统+mysql数据库+lw文档)
  2. visio和office2016安装记录
  3. C51串口通信(张毅刚)例8-1程序解释
  4. 《Total Commander:万能文件管理器》——12.6. 附录
  5. Redmi K20 安卓9跨版本刷第三方ROM
  6. 【点云3D目标检测】跑通CIA-SSD过程中的一些报错集锦
  7. cocos2dx layer理解
  8. Android渐变遮罩
  9. Stratum mining protocol
  10. Ubuntu 16.04开机出现Kernel panic 。。。解决办法(亲测有效)