j = j ++ 和 j = ++ j的区别
今天看到一个题,问下面代码输出来是答案是多少:
public class Test {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++;可以转换为如下写法:
temp = j;
j = j + 1;
j = temp;
像j=j++;这种赋值语句, Java编译器每次遇到自增、自减运算符的时候都会开辟一块新的内存空间来保存赋值之前j的值,就是前文介绍的缓存变量,然后再将这个换成变量的值赋给左边的变量。
详细点说,在这里JVM里面有两个存储区,一个是暂存区(以下称为堆栈),另一个是变量区。j=j++是先将j的值(0,原始值)存入堆栈中(对应图中分配一块新的内存空间),然后对变量区中j自加1,这时j的值确实是1,但随后将堆栈中的值赋给变量区的j,所以最后j=0;
我们再来看看 j=++j
j=j+1;
temp=j;
j=temp;
j=++j,是先对变量区中的j加1,再将变量区中的j值1存入堆栈,最后将堆栈中的值赋给自变量区的j,所以j=1;
j = j ++ 和 j = ++ j的区别相关推荐
- iptables中-j选项与-g选项的区别
手册 # man iptables ... -j, --jump target This specifies the target of the rule; i.e., what to do if t ...
- Check failed: top_shape[j] == bottom[i]-shape(j) (1 vs. 2) All inputs must have the same shape, exc
在运行ShuffleNet的过程中碰到了如下报错 : I1018 19:26:19.104892 3548 net.cpp:84] Creating Layer resx13_concat I1018 ...
- SWPU-DS)若有 n 阶对称矩阵 A,以行序为主序方式,将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在 B 中确定 a[i, j](i<j)
SWPU-DS)若有 n 阶对称矩阵 A,以行序为主序方式,将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1-(n(n+1))/2]中,则在 B 中确定 a[i, j](i< ...
- 在matlab中chrom,一段matlab程序,其中chrom(i,j)=p(chrom(i,j),j)是什么意思
一段matlab程序,其中chrom(i,j)=p(chrom(i,j),j)是什么意思0 function[eval]=targetalloc(chrom) [m,n]=size(chrom); p ...
- pytorch 代码:yield features.index_select(0,j), labels.index_select(0,j)
pytorch 代码:yield features.index_select(0,j), labels.index_select(0,j) yield features.index_select(0, ...
- for(j=0,i=0;j6,i10;j++,i++) { k=i+j; } k 值结果是多少?
<script type="text/javascript">function Test(){var k=0;for(j=0,i=0;j<6,i<10;j+ ...
- 2018 CCPC桂林H,J 2019ICPC 台北H J
这场nice,一个签到,三个铜牌题做出,铜牌题做两个就有铜了. 但是除了读题基本0贡献了,签到的活被抢了,G完全没参与,H想好思路之后居然写挂了. J(博弈) 之前做过一个题是确定最终状态,由于真的长 ...
- i += j ;与 i = i + j ; 的区别
首先要知道 i += j; 等于 i = (T) (i + j); 这个 T 是 i 的类型,而 i = i + j; 是同类型的. 举个例子:int x = 5; x += 5.6; //这个语 ...
- c语言(p i),【C语言】*(p+i) [j] 和 (*(p+i))[j] 的区别问题。万分感谢!!
满意答案 fhxzz 2013.09.10 采纳率:49% 等级:12 已帮助:7395人 *(p+i) [j]分两步 1.tmp = (p+i)[j 2.return *tmp (*(p+i) ...
- iptables的nat表中 -j redirect 与-dnat --to-destnation的区别
redirect是针对本机的,本机产生的包转到localhost的某个端口,适合用redirect,会比DNAT效率高点. 而外部地址只能用DNAT了.
最新文章
- 这 3 个字是未来发展关键,不重视的企业,正在被淘汰
- ROS探索总结(十三)(十四)(十五)——导航与定位框架 move_base(路径规划) amcl(导航与定位)
- <马哲>劳动价值论的理论及实践意义
- [2016-03-15]rabbitmq notes
- 如何初始化一个vue项目
- 线性代数:矩阵学习笔记
- SQL server 使用自定义函数以及游标
- 求助,我在Kell官网上下载的固件库,双击运行后显示错误:Zip integrity check failed.,该怎么解决?
- 【数据结构与算法C语言版】基础代码整理 思维导图
- nc 二次开发_金蝶云星空(K3CLOUD)和用友NC对比
- Linux系统基本操作及命令详解
- SAML 协议-简单的SAML
- Java 日志框架详解
- [论文阅读笔记17]A Survey on Knowledge Graph-Based Recommender Systems
- 17.python-解决 pycharm运行提示:from PyQt5 impor ImportError:DLL load failed while importing QtCore
- 了解自动驾驶 从ADAS开始
- oracle监听程序的配置
- 第一类公民(First-class Citizen)
- 三翼鸟:定义“新居住”
- 鸿蒙系统什么手机可以,鸿蒙系统的手机,会有哪些不一样的体验?
热门文章
- curl 调试工具 curl_getinfo
- 三星530换固态硬盘_满血PCIe 4.0:三星980PRO固态硬盘评测
- 开机启动时右下角的小喇叭不见了
- expandablelist
- 计算机在线作业三答案,电科19秋《计算机操作系统》在线作业3【满分答案】
- 此文件是二进制文件或使用了不支持的文本编码_计算机的基本原理(组成、发展、DOS、交互、文件、进制、环境)...
- 实现企业的降本增效,设备管理应该怎么做?
- 川崎机器人signal_川崎机器人常用指令表
- CSS3中(border-radius)边框圆角详解
- iOS每日一记之———————————————终级完美大整理