zoukankan      html  css  js  c++  java
  • java中间缓存变量机制

    废话不说,直接看例子

    1 public class Test3 {
    2     public static void main(String[] args) {
    3         int j =0 ;
    4         for(int i =0 ;i<100;i++){
    5             j=++j;
    6         }
    7         System.out.println(j);
    8     }
    9 }
    输出结果是 100

    j = ++j;
    即为:
      j = j + 1;
      temp = j;
      j = temp
    public class Test3 {
        public static void main(String[] args) {
            int j =0 ;
            for(int i =0 ;i<100;i++){
                j=j++;
            }
            System.out.println(j);
        }
    }

    //输出结果为0

    过程为:
      temp = j;
      j= j+1;
      j= temp;

    为什么会出现这两种不同的情况呢?

      (1)是因为java使用了中间变量缓存机制,在执行自增运算的时候,会为每个自增操作分配一个临时变量。如果是前缀加(++i)会先自加1后赋值(给临时变量),如果是后缀加(i++),就会先赋值后加1,运算最终使用的并不是变量本身,而是被赋了值的临时变量。

      (2)j=j++可以分解为赋值和自增两个操作:读出一个值到缓存,将值赋给变量,所以我们要完成三次操作:

      temp = j;(读取变量j到缓存)

      j = j + 1;(改变变量j的值为缓存值,改变变量j的值为1)

      j = temp;(直接读取的值为缓存之0),所以本题读取的值最终是0.

      

  • 相关阅读:
    Linux部署Spingboot项目
    Linux Centos7yum安装Mysql8.0.21
    Linux配置网络yum源,提高下载速度
    Linux安装jdk1.8
    Spring的AOP
    Spring的事务管理
    Maven项目中,使用mybatis,根据数据库自动生成pojo实体类、dao、mapper
    Ubuntu14.04中使用docker容器部署tomcat镜像+java web项目
    mybatis
    spl
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10487753.html
Copyright © 2011-2022 走看看