转: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的执行是这样的:

《转:JVM的运行原理 一个号称打败所有程序员的一道题目》

《转:JVM的运行原理 一个号称打败所有程序员的一道题目》

 

 

    原文作者:JVM
    原文地址: http://www.cnblogs.com/youxin/archive/2012/11/22/2783412.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞