赞
踩
一般都使用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 版权所有,并保留所有权利。