当前位置:   article > 正文

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

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();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

由代码可见,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()的话,新建对象也会占用部分的内存,这就是是否使用 内存换效率 的问题了

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号