random.nextint(n) 生成 [0, n) 范围随机整数,因文档明确其返回值为 0(含)到 bound(不含);常见错误是加减 1 破坏范围,正确用法即 nextint(n);扩展范围用 nextint(b-a)+a;多线程推荐 threadlocalrandom.current().nextint(n)。

Random.nextInt(n) 直接生成 [0, n) 范围内的随机整数,不需要额外计算或调整。
为什么 nextInt(n) 就是 [0, n)?
Java 的 Random.nextInt(int bound) 方法文档明确说明:它返回一个从 0(含)到 bound(不含) 的伪随机 int 值。也就是说,nextInt(10) 会返回 0~9 中的任意整数,正好覆盖 [0, 10)。
常见误区:别加 1 或减 1
- ❌
nextInt(n + 1)→ 实际范围是[0, n+1),即 0 到 n(含),超出了目标范围 - ❌
nextInt(n) + 1→ 变成[1, n+1),最小值变成 1,不是从 0 开始 - ✅ 正确写法就是
nextInt(n),简洁且语义准确
如果需要其他范围,再做偏移
当你要的是 [a, b)(左闭右开),可基于 nextInt(b - a) 平移:
int r = random.nextInt(b - a) + a;- 例如生成 [5, 15):用
nextInt(10) + 5 - 注意:b - a 必须为正整数,否则抛
IllegalArgumentException
替代方案:ThreadLocalRandom(推荐用于多线程)
在并发场景下,优先用 ThreadLocalRandom.current().nextInt(n),性能更好、线程安全:
- 它也遵循相同规则:参数
n表示上界(不包含) - 无需创建 Random 实例,避免竞争和种子同步开销
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











