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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

String 重载 + 原理分析

發布時間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String 重载 + 原理分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、疑問

昨天在逛知乎的時候看到有一個公司的面試題是關于 String 對象 的,大概意思是 String 類的 “+”是如何實現的,剛好前些天在書上有看到這個實現方式,現在寫出來供大家參考。下面先來大致了解一下 String 這個類:

public final class String extends Object implements Serializable, Comparable<String>, CharSequence

String 類底層是一個 final 修飾的 char 類型數組,意味著 String 類的對象是不可變的,所以 String 對象可以共享。

String 類中的每一個看起來會修改 String 值的方法,實際上都是創建了一個全新的 String 對象,用來包含修改后的字符串內容,這也可以說明 String 對象具有只讀的屬性。

這種不可變性意味著存在著一定的效率問題。當為 String 類重載 “+” 操作符就是一個例子。

public class StringTest {public static void main(String[] args) {String apple = "Apple,";String fruit = apple + "Pear," + "Orange";System.out.println(fruit);} }

輸出
Apple,Pear,Orange

二、問題分析

不知道你們有沒有想過這段代碼是如何工作的,可能我們會想:String 類有一個 append() 的方法,它會生成一個新的 String 對象,以包含連接的字符串。

首先它會先連接 apple 與 Pear 生成一個對象,然后該對象再與 Orange 相連,生成另一個新的對象,以此類推,得到最終的 String 對象。

這種方式看似行得通,但是為了得到最終的 String 對象,會產生很多被垃圾回收機制回收的中間對象,這樣實現的性能肯定是及其糟糕的。

其實編譯器在執行上述代碼的時候會的自動引入 java.lang.StringBuilder 類。雖然在上面的代碼中我們并沒有使用到 StringBuilder 類,但是編譯器卻自動引入了它,因為它更高效。

上面這個例子中,編譯器會創建一個 StringBuilder 對象,用來構造最終要生成的 String,并為每一個字符串調用一次 StringBuilder 中的 append() 方法,因此上述代碼一共執行了三次 append() 方法。最后調用 toString 生成最終的結果,并保存為 fruit。

三、代碼優化

但是我們不能認為編譯器已經幫我們做了優化,我們就可以隨意的使用 String 對象。下面是兩種方法生成一個 String:一個方法使用了 String 對象,另一個使用了 StringBuilder。

public static String getString1(String[] strArray){String result = "";for(int i = 0; i < strArray.length; i++)result += strArray[i];return result;}public static String getString2(String[] strArray){StringBuilder result = new StringBuilder();for(int i = 0; i < strArray.length; i++)result.append(strArray[i]);return result.toString();}

上面兩個方法都是用來對一個數組中的數據進行連接返回一個 String 對象但是需要我們注意的是 getString1 方法是在循環內部構造 StringBuilder 對象的,這意味著每循環一次就會創建一個新的 StringBuilder 對象。

getString2 方法只生成了一個 StringBuilder 對象,這樣更簡單更高效的實現了同 getString1 一樣的功能。所以在我們使用 String 對象時,最好考慮一下是否可以用 StringBuilder 對象更高效的實現我們想要的功能。

四、參考文獻

  • 《Java 編程思想》Bruce Eckel 著 陳昊鵬 譯

總結

以上是生活随笔為你收集整理的String 重载 + 原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品亚洲天堂 | 精品国产免费观看 | 国产精品36p| 婷婷网址 | 中文字幕在线播放日韩 | 欧美性生话 | 成人软件在线观看 | 久久婷婷色综合 | ass极品国模人体欣赏 | 色网在线免费观看 | 亚洲免费中文字幕 | 影音先锋每日资源 | 欧美精品一区二区蜜桃 | 蜜臀久久99精品久久久久久宅男 | 波多野结衣在线视频播放 | 91女人18毛片水多国产 | 娇喘顶撞深初h1v1 | 日日夜夜草| 欧美三级黄色 | 俄罗斯毛片 | 国产又粗又长又大视频 | 国产一级视频在线观看 | 久久乐国产精品 | 日韩精品xxxx | 婷婷综合网 | 乱子伦一区二区 | 久草网在线视频 | 可以免费观看的av | 91极品蜜桃臀 | 欧美精品一 | 精品国产三级 | 国产午夜精品一区二区 | 日韩精品不卡 | 国产1区二区 | 国产精品夜夜躁视频 | www.婷婷.com | 中国性老太hd大全69 | 婷婷在线免费视频 | 中文字幕免费视频 | 97久久久久 | 亚洲黄色激情 | 国产成人高清在线 | 国产精品第一国产精品 | 午夜影院免费体验区 | 99久久精品国产一区二区三区 | 无码人妻精品一区二区三区9厂 | 亚洲国产精品久久久久 | 三级国产视频 | 正在播放国产一区 | 欧美高清免费 | 国产又粗又猛又色又 | 国产在线资源 | 免费欧美在线 | 免费看日韩毛片 | 六月丁香激情网 | 久久精品无码专区 | 成人午夜在线观看视频 | 亚洲爱爱网 | 黄色精品网站 | 亚洲毛片一级 | 欧美一区二区三 | 久久av一区二区三区漫画 | 国产午夜一级一片免费播放 | 亚洲 欧洲 日韩 | 人成免费| 丰满人妻一区二区三区免费视频 | 欧美成人a∨高清免费观看 国产精品999视频 | 亚洲涩涩在线 | 91综合视频 | 丰满人妻一区二区三区精品高清 | 黄色免费在线观看网站 | 国产精品ⅴa有声小说 | 欧美激情在线观看一区 | 不良视频在线观看 | 亚洲影院中文字幕 | 夜色成人网 | 国产欧美一区二区三区精华液好吗 | 粉嫩av一区二区三区四区五区 | 女生扒开腿让男生操 | 亚洲欧美综合自拍 | 免费视频网站在线观看入口 | 夜夜夜爽 | 男女互插视频 | 欧美日韩三区 | 男人天堂综合 | 亚洲欧美日韩中文在线 | 日韩天堂| 欧美日本色图 | 六月婷婷综合 | 91看片在线看 | 四虎三级 | 国产精品免费久久 | 女人18毛片一区二区三区 | 婷婷色中文网 | av免费观看网址 | 日韩欧美中文字幕一区 | 人人做人人爽人人爱 | 天堂资源在线播放 | www欧美精品 |