首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 中 Math.random() 與 java.util.Random 的差異比較

     編輯:Java 相關知識

前言

Java 提供兩種常見的產生隨機數方式:Math.random() 與 java.util.Random 類。兩者在使用方式、回傳型別、效能與適用場景上有明顯差異,本文將詳細比較。

一、Math.random()

  • 靜態方法,回傳 double 型別,範圍為 [0.0, 1.0)。
  • 內部實際上是建立一個 Random 實例並呼叫 nextDouble()。
  • 適合簡單、低頻率的隨機需求,但頻繁呼叫時效能較差(涉及浮點運算與物件建立)。

二、java.util.Random

  • 類別實例化後可呼叫多種方法: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
回傳型別doubleint/long/double/boolean 等
指定範圍需自行計算nextInt(bound) 直接支援
執行緒安全是(內部同步)否(多執行緒下需自行同步或用 ThreadLocalRandom)
效能較慢較快(特別是 ThreadLocalRandom)

五、總結

  • 簡單、偶發性需求:Math.random() 足夠。
  • 高頻率、多型別、指定範圍:優先使用 java.util.Random 或 ThreadLocalRandom。
  • 多執行緒環境:務必使用 ThreadLocalRandom 避免爭用與種子碰撞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved