为什么 Random.nextInt() %16 偏斜而 Random.nextInt(16) 工作得很好?

Why is Random.nextInt() %16 skewed while Random.nextInt(16) works perfectly fine?

我正在编写一个将雪球视为彩弹的 Bukkit 插件。当我不小心使用了:

(byte) (random.nextInt() % 16)

而不是

(byte) (random.nextInt(16))

我注意到较低的数字比较高的数字出现得更多。为什么会这样?

例如:之前:

00010
01200
06001
30010
00502

例如:之后:

74108
73447
98956
17386
26574

random.nextInt() 也可以 return 负值,我的程序将负数视为零,加倍 使零出现的机会增加三倍。