System,Runtime,Math,StringBuffer和StringBuilder

nadooo發表於2024-08-05

System,Runtime,Math

在Java中,SystemRuntimeMath 是三個非常常用且重要的類,它們分別屬於不同的包(java.lang),提供了不同的功能。下面是對這三個類的簡要介紹:

1. System 類

System 類位於 java.lang 包中,因此它是自動匯入的,不需要顯式地匯入。這個類提供了一些有用的類欄位和靜態方法,用於訪問與Java執行時環境相關的系統屬性和資源。

  • 常用方法

    • System.out.println(String x):向標準輸出裝置(通常是控制檯)列印一個字串,並換行。
    • System.exit(int status):終止當前執行的Java虛擬機器。引數是一個狀態碼,0 通常表示正常退出。
    • System.currentTimeMillis():返回自1970年1月1日00:00:00 GMT以來的毫秒數。
    • System.getProperty(String key):獲取系統屬性的值。

2. Runtime 類

Runtime 類也是位於 java.lang 包中,它代表了Java程式執行時的環境。每個Java應用程式都有一個 Runtime 例項,該例項允許應用程式與Java執行時的環境介面。

  • 常用方法

    • Runtime.getRuntime():返回當前Java應用程式的 Runtime 物件。
    • Runtime.exec(String command):執行指定的字串命令。
    • Runtime.freeMemory():返回Java虛擬機器中的空閒記憶體量。
    • Runtime.totalMemory():返回Java虛擬機器試圖使用的總記憶體量。
    • Runtime.maxMemory():返回Java虛擬機器試圖使用的最大記憶體量。

3. Math 類

Math 類同樣位於 java.lang 包中,它包含用於執行基本數學運算的方法,如指數、對數、平方根和三角函式。

  • 常用方法

    • Math.abs(int a):返回整數的絕對值。
    • Math.ceil(double a):返回大於或等於引數的最小雙精度浮點數,等於一個整數。
    • Math.floor(double a):返回小於或等於引數的最大雙精度浮點數,等於一個整數。
    • Math.max(int a, int b):返回兩個整數中的最大值。
    • Math.min(int a, int b):返回兩個整數中的最小值。
    • Math.pow(double a, double b):返回第一個引數的第二個引數次冪的值。
    • Math.random():生成一個大於等於0.0且小於1.0的隨機雙精度浮點數。
    • Math.round(double a):返回最接近引數的 long
    • Math.sqrt(double a):返回正確舍入的 double 值的正平方根。

這些類在Java開發中非常有用,涵蓋了系統操作、執行時環境管理和數學計算等多個方面。

4.StringBuffer和StringBuilder類

StringBufferStringBuilder 是 Java 中用於構建可變字串的類。它們允許我們在建立後修改字串的內容,這與 Java 中的 String 類不同,後者是不可變的。當需要頻繁修改字串時,使用 StringBufferStringBuilder 比使用字串連線(如使用 + 運算子)更高效,因為後者在每次連線時都會建立一個新的字串物件。

主要區別

  • 執行緒安全性StringBuffer 是執行緒安全的,這意味著它的所有公開方法都是同步的。這意呀著在多執行緒環境中,當一個執行緒訪問 StringBuffer 物件時,其他執行緒不能訪問它,直到該執行緒完成操作。相比之下,StringBuilder 不是執行緒安全的,因此它在單執行緒環境中效能更好。
  • 效能:由於 StringBuilder 沒有同步開銷,因此它通常比 StringBuffer 快。但是,在需要執行緒安全性的情況下,應使用 StringBuffer

使用場景

  • 如果你在多執行緒環境中工作,並且需要構建可變字串,那麼應該使用 StringBuffer
  • 如果你在單執行緒環境中工作,並且需要構建可變字串,那麼使用 StringBuilder 將是更好的選擇,因為它提供了更好的效能。

示例

下面是一個使用 StringBuilder 的簡單示例:

public class StringBuilderExample {  
    public static void main(String[] args) {  
        StringBuilder sb = new StringBuilder("Hello, ");  
        sb.append("world!");  
        System.out.println(sb.toString()); // 輸出: Hello, world!  
    }  
}

在這個示例中,我們建立了一個 StringBuilder 物件,並使用 append 方法向其新增文字。最後,我們使用 toString 方法將其轉換為一個普通的 String 物件,並將其列印出來。

注意事項

  • 雖然 StringBufferStringBuilder 提供了修改字串的便利,但它們也會消耗更多的記憶體,因為它們在修改時會建立新的字元陣列(如果需要的話)。然而,與建立大量 String 物件相比,這種記憶體使用通常是可接受的。
  • 在某些情況下,如果你知道字串的最終長度,可以在建立 StringBuilderStringBuffer 時指定一個初始容量,以減少重新分配內部字元陣列的需要。但是,如果指定的容量太小,並且後續新增了更多的內容,則仍然可能需要重新分配陣列。因此,通常建議讓 StringBuilderStringBuffer 自動管理其容量。

相關文章