本篇文章帶給大家的內容是關於 java中String和StringBuffer有何不同? (區別對比),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
前言
String和StringBuffer都是java關於字元操作的類別
尤其String,常常看到類似這樣的賦值程式碼String str = "Hello World",看起來好像int一樣以為是java的基本資料型別,其實不是,String是一個類,是一個特殊的類,可以像基本資料型別一樣直接賦值。
java中有三個類別可以對字元進行操作:
(1)Character 是進行單一字元操作的類別。
(2)String 對一串字元進行操作的不可變類別。
(3)StringBuffer 也是對一串字元進行操作,但是可變類別。
Java中String和StringBuffer類別區別
StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值,其實是兩個對象。
String是對象,不是原始型別;為不可變對象,一旦被創建,就不能修改其值。
對於已經存在的String物件的修改,實際上是重新建立一個新的對象,然後把新的值存進去。
String是final類,不能被繼承。
StringBuffer是一個可變對象,當對它修改的時候,不會像String那樣重新建立對象,它只能透過建構函式來建立。物件被創立後,會分配記憶體空間,並初始保存一個null。向StringBuffer賦值的時候,可以透過它的append方法:obj.append("hello");
字串連線作業中StringBuffer的效率比String高。
如果程式中需要對字串進行頻繁的修改連接操作的話,使用StringBuffer效能會更高。
在String類別中,沒有用來改變已有字串中的某個字元的方法,由於不能改變一個java字串中的某個單獨字符,所以在JDK文檔中稱String類別的物件是不可改變的。
然而,不可變的字串有一個很大的優點:編譯器可以把字串設定為共享的。
StringBuffer是線程安全的,在多執行緒程式中也可以很方便的進行使用,但是程式執行效率相對來說就要稍微慢一些。
StringBuffer類別中的方法偏重於字串的變化,例如追加、插入和刪除等,這個也是StringBuffer和String類別的主要區別。
String與StringBuffer連接字串比較
-
String str = new String("Hello World");str = "hello world";此字串連接的處理過程:
(1)建立一個StringBuffer;
(2)呼叫append()方法;
(3)最後StringBuffer呼叫toString()給String重新賦值
(4)這樣看來,String的連線操作,比StringBuffer多了一些操作,效率上就會打折扣。
(5)而且,由於String是不可變對象,每次重新賦值都會重新創建新的對象,那麼原來的對象就沒用了,就要被垃圾回收,也影響性能。 StringBuffer類別屬於一種輔助類,可預先分配指定長度的記憶體區塊建立一個字串緩衝區。這樣使用StringBuffer類別的append方法追加字符,比String使用「 」操作符添加字符到一個已經存在的字串後面有效率的多。
使用「 」運算子每一次將字元新增到一個字串中去時,字串物件都需要尋找一個新的記憶體空間來容納更大的字串,這無疑是一個非常消耗時間的操作。添加多個字元就意味著要一次又一次的對字串重新分配記憶體。使用StringBuffer就避免了這個問題。
以上是java中String和StringBuffer有何差別? (區別對比)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runany where”哲學。 1)itusesbytiesebyTecodeThatrunsonAnyJvm-備用Platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

在Java中編寫平台特定代碼的原因包括訪問特定操作系統功能、與特定硬件交互和優化性能。 1)使用JNA或JNI訪問Windows註冊表;2)通過JNI與Linux特定硬件驅動程序交互;3)通過JNI使用Metal優化macOS上的遊戲性能。儘管如此,編寫平台特定代碼會影響代碼的可移植性、增加複雜性、可能帶來性能開銷和安全風險。

Java將通過雲原生應用、多平台部署和跨語言互操作進一步提昇平台獨立性。 1)雲原生應用將使用GraalVM和Quarkus提升啟動速度。 2)Java將擴展到嵌入式設備、移動設備和量子計算機。 3)通過GraalVM,Java將與Python、JavaScript等語言無縫集成,增強跨語言互操作性。

Java的強類型系統通過類型安全、統一的類型轉換和多態性確保了平台獨立性。 1)類型安全在編譯時進行類型檢查,避免運行時錯誤;2)統一的類型轉換規則在所有平台上一致;3)多態性和接口機制使代碼在不同平台上行為一致。

JNI會破壞Java的平台獨立性。 1)JNI需要特定平台的本地庫,2)本地代碼需在目標平台編譯和鏈接,3)不同版本的操作系統或JVM可能需要不同的本地庫版本,4)本地代碼可能引入安全漏洞或導致程序崩潰。

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器