赞
踩
一般都使用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()的话,新建对象也会占用部分的内存,这就是是否使用
内存换效率
的问题了,至于如何选择,见仁见智了, 个人浅见,欢迎各位指正...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。