Java 提供兩種常見的產生隨機數方式:Math.random() 與 java.util.Random 類。兩者在使用方式、回傳型別、效能與適用場景上有明顯差異,本文將詳細比較。
double 型別,範圍為 [0.0, 1.0)。Random 實例並呼叫 nextDouble()。nextInt()、nextLong()、nextDouble()、nextBoolean() 等。nextInt(bound) 可直接產生指定範圍內的整數,使用更直觀。Random 實例在短時間內重複建立(種子相近)會產生相同序列,建議全域共用單一實例或使用 ThreadLocalRandom(Java 7+)。// Math.random() 產生 0~99 整數 int num1 = (int) (Math.random() * 100); // Random 產生 0~99 整數 Random random = new Random(); int num2 = random.nextInt(100); // 避免重複種子問題:共用實例或使用 ThreadLocalRandom // ThreadLocalRandom.current().nextInt(100); // Java 7+ 推薦
| 特性 | Math.random() | java.util.Random |
|---|---|---|
| 回傳型別 | double | int/long/double/boolean 等 |
| 指定範圍 | 需自行計算 | nextInt(bound) 直接支援 |
| 執行緒安全 | 是(內部同步) | 否(多執行緒下需自行同步或用 ThreadLocalRandom) |
| 效能 | 較慢 | 較快(特別是 ThreadLocalRandom) |
Math.random() 足夠。java.util.Random 或 ThreadLocalRandom。ThreadLocalRandom 避免爭用與種子碰撞。