Java生成随机数Math.random()和new Random().nextInt(),new Random().nextDouble()效率问题

一般都使用Math.random()*100来生成随机整数,最近通过静态代码缺陷检查工具发现了一种新的方式--new Random().nextInt();

据网上资料说,使用new Random().nextInt(100)生成的随机数效率高于后者,时间上前者大约是后者50%到80%的时间.

查看Math.random()方法底层代码:

public final class Math {
    //Math的random()方法实质上就是调用Random类对象的nextDouble()方法来实现的
    public static double random() {
	return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
    }
    private static final class RandomNumberGeneratorHolder {
        static final Random randomNumberGenerator = new Random();
    }
}
由代码可见,Math的random()方法实质上就是调用Random类对象的nextDouble()方法来实现的,然后我们就说 new Random().nextInt()方法的效率高于Math.random(),但是,我们注意到,在final static Math类中, Random对象 是定义 在Math中 的一个静态内部类final static RandomNumberGeneratorHolder中的一个final static 类型的对象,因此它 在Math中是单例的 ,每次来调用Math.random()方法时用到的都是同一个Random对象,因此不会再次创建Random对象来占用内存  ,与之相反,如果我们每次产生随机数都new Random.nextInt()的话,新建对象也会占用部分的内存,这就是是否使用 内存换效率 的问题了,至于如何选择,见仁见智了,   个人浅见,欢迎各位指正...

猜你喜欢

转载自blog.csdn.net/ydk888888/article/details/80110388