摘要:中间缓存变量,在看面试宝典时,看到面试例题,关于缓存变量,一直一脸茫然,查了部分资料,在这里和大家分享一下。题目输出结果居然是在这里,就涉及到所谓的中的中间缓存变量了。
Java中间缓存变量,在看《Java面试宝典》时,看到面试例题,关于Java缓存变量,一直一脸茫然,查了部分资料,在这里和大家分享一下。
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中的中间缓存变量了。在Java中(其他的语言不了解),当进行自增(或自减)运算时,Java会对运算的变量进行临时缓存。
例如:
j = 0; j = j ++; 就可以分解成: temp = j = 0; //由于自增在后,所以,先进行临时变量缓存 j = j + 1; // j ++ 运算 ,缓存变量后,进行运算自增 j = temp; // 将缓存变量赋值给 j
可以这么理解,也就是, j = j++运算的时候 ,先进行左边的运算,然后再进行赋值,思路是这样的。
然后,当左边进行了两个运算,第一步是利用中间缓存变量,缓存 j 的初始值,也就是0, 第二部,是给j的变量自增为1, 因为这是两步,右边的自增是在 是后运算,所以当进行给左边赋值的时候,就行使用初始值,也就是临时缓存变量赋值,而自增的结果就会被抛弃。以上是个人总结后认为比较好理解的地方,如有其他意见,还请交流指出,谢谢!
具体参考地址:http://blog.csdn.net/u0112634...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70488.html
摘要:物理计算机并发问题在介绍内存模型之前,先简单了解下物理计算机中的并发问题。基于高速缓存的存储交互引入一个新的问题缓存一致性。写入作用于主内存变量,把操作从工作内存中得到的变量值放入主内存的变量中。 物理计算机并发问题 在介绍Java内存模型之前,先简单了解下物理计算机中的并发问题。由于处理器的与存储设置的运算速度有几个数量级的差距,所以现代计算机加入一层读写速度尽可能接近处理器的高速缓...
摘要:内存模型即,简称,其规范了虚拟机与计算机内存时如何协同工作的,规定了一个线程如何和何时看到其他线程修改过的值,以及在必须时,如何同步访问共享变量。内存模型要求调用栈和本地变量存放在线程栈上,对象存放在堆上。 Java内存模型即Java Memory Model,简称JMM,其规范了Java虚拟机与计算机内存时如何协同工作的,规定了一个线程如何和何时看到其他线程修改过的值,以及在必须时,...
摘要:内存模型对内存模型的介绍对内存模型的结构图的线程之间的通信是通过共享内存的方式进行隐式通信,即线程把某状态写入主内存中的共享变量,线程读取的值,这样就完成了通信。 Java内存模型(JMM) 1.对内存模型的介绍 ①对Java内存模型的结构图 java的线程之间的通信是通过共享内存的方式进行隐式通信,即线程A把某状态写入主内存中的共享变量X,线程B读取X的值,这样就完成了通信。是一种...
摘要:此时,就出现了线程不安全问题了。因为的初始值会是因此,重排序是有可能导致线程安全问题的。真的能完全保证一个变量的线程安全吗我们通过上面的讲解,发现关键字还是挺有用的,不但能够保证变量的可见性,还能保证代码的有序性。 对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事。 这篇文章将从多个方面来讲解vol...
阅读 2637·2023-04-25 20:19
阅读 1858·2021-11-24 09:38
阅读 1581·2021-11-16 11:44
阅读 4145·2021-09-02 15:40
阅读 1286·2019-08-30 15:55
阅读 1951·2019-08-30 15:52
阅读 3700·2019-08-29 17:20
阅读 2141·2019-08-29 13:48