Random类用于生成非密码学安全的伪随机数,适用于测试、模拟等场景;提供nextInt()、nextDouble()、nextBoolean()等方法生成整数、小数和布尔值,并支持种子设定以保证序列可重现。

Java里的Random类用来生成伪随机数,适用于测试、模拟、游戏逻辑、数据扰动等对“不可预测性”要求不高的场景。它不是密码学安全的,但速度快、使用简单。
生成整数的常见写法
Random提供多种nextInt()用法:
- nextInt():返回一个完整int范围(-2³¹ 到 2³¹−1)内的任意整数
- nextInt(n):返回[0, n)之间的整数,n必须为正数,比如nextInt(10)得到0~9
- 指定区间[m, n]的整数:用random.nextInt(n - m + 1) + m,例如[5, 15]写成nextInt(11) + 5
生成小数和布尔值
浮点类方法默认输出[0.0, 1.0)区间:
- nextFloat() 和 nextDouble():分别返回float/double类型,范围都是≥0.0且<1.0
- 要得到[m, n)区间的小数,用r.nextDouble() * (n - m) + m
- nextBoolean():等概率返回true或false,适合开关逻辑或概率判定
种子(seed)决定可重现性
Random对象初始化时若传入相同long型种子,后续生成的随机序列完全一致:
立即学习“Java免费学习笔记(深入)”;
- new Random(123) 和 new Random(123) 每次调用nextInt()都会产出相同数字序列
- 无参构造new Random() 默认用当前系统时间毫秒作种子,所以通常每次运行结果不同
- 这个特性在单元测试、算法复现、调试中非常有用
其他实用方法
除了基础类型,Random还支持:
- nextLong():生成任意long范围整数
- nextGaussian():生成符合标准正态分布(均值0、标准差1)的double值,适合模拟自然现象
- nextBytes(byte[] b):直接填充字节数组,比逐个生成更高效
- ints(), longs(), doubles():返回IntStream等流式接口,配合limit()、toArray()等使用更灵活










