zoukankan      html  css  js  c++  java
  • 转:JVM的运行原理 一个号称打败所有程序员的一道题目

    题目是这样的:
    class SingleTon {
        
        private static SingleTon singleTon = new SingleTon();
        
        public static int a;
        
        public static int b = 0;
        
        private SingleTon () {
            
            a++;
            b++;
        }
        
        public static SingleTon getInstance() {
            
            return singleTon;
        }
    }

    public class Test {
        
        public static void main(String[] args) {
            
            SingleTon singleTon = SingleTon.getInstance();
            
            System.out.println(" a is "+singleTon.a);
            System.out.println(" b is "+singleTon.b);
        }
        
    }
    输出结果是:
     a is 1
     b is 0

    如果不让运行让程序员说结果的话估计没几个对的,感觉着题目比较别扭,但是如果你理解JVM的运行原理的话就会觉得非常简单,而且结果也在预料中的。

    分析:
            SingleTon 类是一个单例类,当在程序入口main方法中获得SingleTon 实例的时候,jvm会初始化所有静态变量,SingleTon = null,int a会赋值0,int b也会赋值0,然后SingleTon = new SingleTon(),在构造方法中a++,b++,a=1;b=1。程序这时候再往下执行,到了输出,调用a,这时候a没有被再次赋值,所以a就是1,但是b被再次赋值了b=0,所有b就是0 了。输出结果就是上面的结果。

    jvm的执行是这样的:

     

  • 相关阅读:
    题解-Quantifier Question
    题解-[WC2011]最大XOR和路径
    笔记-Recursive Queries
    树套树
    SG函数
    题解-Magic Ship
    分块
    文章根据时间段显示的微信名和微信号
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作) 经典
    nginx配置反向代理
  • 原文地址:https://www.cnblogs.com/youxin/p/2783412.html
Copyright © 2011-2022 走看看