我最近读到你不想在不必要时创建新实例。我不确定我是否理解它的含义。问题是在LogCat中重复这个:
08-09 17:12:11.300: D/dalvikvm(19620): GC_FOR_ALLOC freed 2281K, 23% free 9365K/12048K, paused 12ms, total 12ms
拥有这种方法更好:
public int rand(int i) {
int rand = new Random().nextInt(i);
return rand;
}
而不是这个方法:
public int rand(int i) {
return new Random().nextInt(i);
}
如果你经常调用rand()?为什么或者为什么不?感谢您帮助newb!
答案 0 :(得分:4)
我敢打赌这两种方法会产生相同的字节码。您实际想要实现的是拥有一个Random
实例,只需从该实例调用nextInts
,以便不会一直重置种子。
答案 1 :(得分:4)
这样做:
class ... {
private final Random dice = new Random();
public int rand(int i) {
return dice.nextInt(i);
}
}
这样,您只需拨打new Random()
一次,而不是每次都生成一个号码。
答案 2 :(得分:1)
表演仅仅是偶然的。如果您在每次通话时都创建一个新的Random
对象,那么您不仅会浪费时间,而且根本不会获得随机数。您必须只创建一次Random
对象来创建一个生成器,然后在其上调用各种next...
函数将从该生成器生成随机数。这就是随机数生成器的工作方式。
答案 3 :(得分:-2)
在我看来,你做的事情比他们需要的更复杂。而不是调用创建Random对象并返回新随机数的方法,只需在调用rand(int i)方法的方法中创建一个Random对象。例如,而不是这样做:
public void someMethod()
{
int randomInt = rand(5);
}
这样做:
public void someMethodImproved()
{
Random randObject = new Random();
int randInt = randObject.nextInt(5);
}
然后,您可以根据需要继续调用randObject.nextInt(5),并且它将继续为您提供0(包括)和5(不包括)之间的伪随机整数。