日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stringbuffer_StringBuffer的存在的含义

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stringbuffer_StringBuffer的存在的含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

stringbuffer

當我處理舊代碼并在StringBuffer實例上運行時,通常將它們替換為StringBuilder實例。 盡管可以從此更改中獲得性能優勢,但我經常在我所知不會對性能產生明顯影響的地方進行更改。 我認為,除了可能帶來性能收益外,還應出于各種原因進行更改。 幾乎沒有理由不選擇StringBuilder不是StringBuffer (API期望是最常見的例外),并且代碼中存在StringBuffer誤導讀者,并為Java新手提供了一個不好的例子。

Andy Hunt和David Thomas 在 《 實用編程器:從旅居者到大師 》一書中討論了 “修復代碼中的小問題“破窗”的重要性”。 杰夫·阿特伍德(Jeff Atwood)在“破窗理論”一文中談到了這個主題,最近在“ 軟件腐爛,熵和破窗理論 ”一文中對此進行了介紹,并且不要留下破窗 。 StringBuffer的存在意味著代碼中的陳舊性。 實際上,使用StringBuffer可能不是一個“破損的窗口”,但它是一個真正古老的,泄漏的單窗格窗口 ,應將其替換為現代,節能的雙窗格窗口 。

我發現了Peter Lawrey的最新博客文章StringBuffer,而擺脫遺留代碼有多么困難,這是對代碼中仍然存在的StringBuffer其他含義的有趣理解。 Lawrey引用了StringBuffer類Javadoc文檔的最后一段,“從JDK 5版本開始,該類已經添加了一個等效類,供單線程StringBuilder使用。 通常,StringBuilder類優先于該類使用,因為它支持所有相同的操作,但是它更快,因為它不執行同步。” 然后,Lawrey使用簡單的Java方法和jmap來證明StringBuffer實例仍在JDK附帶的類和庫中使用,直到Java 8為止。

Lawrey指出,在引入“直接替換” StringBuilder十多年之后, StringBuffer在頻繁使用的Java代碼中的存在證明了“清理遺留代碼”有多么困難。 Lawrey的完整結論指出:“在啟動時使用StringBuffer并沒有多大區別,但是考慮到它具有眾所周知的替代替換功能,并且即使在十多年后的新功能中仍可以使用,這表明了它的難易程度。清理遺留代碼或改變思路以使人們使用最佳實踐庫。”

我決定在用Java 8 Update 121進行編譯以及在使用最新版本的OpenJDK 9進行編譯時嘗試使用Lawrey最簡單的示例之一。我(略)將Lawrey的示例調整為下面顯示的簡單“ Main”類清單。

Main.java

import java.io.IOException;/*** (Slightly) adapted class from blog post* "StringBuffer, and how hard it is to get rid of legacy code" at* https://vanilla-java.github.io/2017/04/13/String-Buffer-and-how-hard-it-is-to-get-rid-of-legacy-code.html*/ public class Main {/*** Main function that instantiates this Java "application" and does nothing* else until "ENTER" is pressed.*/public static void main(final String[] args) throws IOException{System.out.println("Waiting [press ENTER to exit] ..");System.in.read();} }

以下屏幕快照顯示了使用jcmd及其-all選項(檢查中包括無法訪問的對象)的輸出,以顯示在簡單Java應用程序中編譯并針對三種不同版本的Java( Java)運行StringBuffer和StringBuilder的實例數8更新102 , Java 8更新121和OpenJDK 9.0 ea + 164 )。 jcmd的執行在PowerShell中執行,因此Select-String的用法與Linux中grep的用法類似。

盡管使用Java 8版本編譯和執行的類的版本具有StringBuffer實例,但是使用Java 9編譯并針對Java 9執行的版本僅具有StringBuilder實例。 看起來JDK-8041679 (“在核心庫類中用StringBuilder替換StringBuffer的使用”)和JDK-8043342 (“在密碼子中用StringBuilder替換StringBuffer的使用”) 的解析已達到預期的效果。

翻譯自: https://www.javacodegeeks.com/2017/04/implications-presence-stringbuffer.html

stringbuffer

總結

以上是生活随笔為你收集整理的stringbuffer_StringBuffer的存在的含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。