欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于String不可變字符與StringBuilder可變字符的效率問題

 更新時間:2021年07月14日 10:43:41   作者:perilla紫蘇  
這篇文章主要介紹了String不可變字符與StringBuilder可變字符的效率問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

String與StringBuilder的效率

‍1.如果需知要拼接的內(nèi)容比較道少

不可變,拼接的多會產(chǎn)生多個新的對象,十分的耗費內(nèi)存空間和程序執(zhí)行效率

String result = "abc" + String.valueOf(1);
String result = "abc" + 1;

2.如果需內(nèi)要拼接的內(nèi)容比較容多

可以使用可變對象StringBuilder或者StringBuffer

String result = new StringBuffer().append("abc").append(1).append("def").append(2).toString();
package 可變與不可變的陷阱以及測試效率;
public class TimeTest {
	public static void main(String[] args) {
		StringTime();
		StringBuilderTime();
	}
	public static void StringTime() {
		long num1 = Runtime.getRuntime().freeMemory(); // 獲取系統(tǒng)內(nèi)存剩余空間
		long time1 = System.currentTimeMillis();// 獲取系統(tǒng)當(dāng)前時間
		String str = "";
		for (int i = 0; i < 1000; i++) {
			str = str + i;
		}
		// System.out.println(str);//
		long num2 = Runtime.getRuntime().freeMemory(); // 獲取系統(tǒng)內(nèi)存剩余空間
		long time2 = System.currentTimeMillis();// 獲取系統(tǒng)當(dāng)前時間
		System.out.println("String所用內(nèi)存空間" + (num1 - num2));// 所用內(nèi)存空間
		System.out.println("String所用時間" + (time2 - time1));// 所用時間
	}
	public static void StringBuilderTime() {
		long num1 = Runtime.getRuntime().freeMemory(); // 獲取系統(tǒng)內(nèi)存剩余空間
		long time1 = System.currentTimeMillis();// 獲取系統(tǒng)當(dāng)前時間
		StringBuilder str = new StringBuilder("");
		for (int i = 0; i < 1000; i++) {
			str.append(i);
		}
		// System.out.println(str);
		long num2 = Runtime.getRuntime().freeMemory(); // 獲取系統(tǒng)內(nèi)存剩余空間
		long time2 = System.currentTimeMillis();// 獲取系統(tǒng)當(dāng)前時間
		System.out.println("StringBuilder所用內(nèi)存空間" + (num1 - num2));// 所用內(nèi)存空間
		System.out.println("StringBuilder所用時間" + (time2 - time1));// 所用時間
	}
}

在這里插入圖片描述

總結(jié):

用String拼接字符串會產(chǎn)生大量對象耗費內(nèi)存以及執(zhí)行效率,所以在開發(fā)中建議使用StringBuilder進行字符串拼接

測試StringBuffer與StringBuilder的效率

相同點:

都是長度可變的字符串,兩者基本操作相同

兩者主要區(qū)別在于:

1.StringBuffer是線程安全的,StringBuilder是線程不安全的

2.StringBuffer從jdk1.0就存在,StringBuilder是在jdk5.0后才出現(xiàn)

StringBuilder相較與StringBuffer有速度優(yōu)勢,所以多數(shù)情況下建議使用StringBuilder

然而應(yīng)用程序要求線程安全的情況下,則必須使用StringBuffer類

代碼演示

//StringBuilder線程不安全
public class StringBuilderDemo {
	public static void main(String[] args) {
		long beginTime = System.currentTimeMillis();//開始計時
		StringBuilder builder = new StringBuilder();
		for(int i=0;i<80000000;i++) {
			builder.append(i);
		}
		long endtime = System.currentTimeMillis();//結(jié)束計時
		System.out.println("StringBuilder所用時間:"+(endtime-beginTime));
	}
}

結(jié)果:

在這里插入圖片描述

//StringBuffer線程安全
public class StringBufferDemo {
	public static void main(String[] args) {
		long beginTime1 = System.currentTimeMillis();//開始計時
		StringBuffer buffer = new StringBuffer();
		for(int i=0;i<80000000;i++) {
			buffer.append(i);
		}
		long endtime1 = System.currentTimeMillis();//結(jié)束計時
		System.out.println("StringBuffer所用時間:"+(endtime1-beginTime1));
	}
}

結(jié)果:

在這里插入圖片描述

由此可見,StringBuilder確實是會比StringBuffer速度更快一些。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設(shè)置PDF跨頁表格重復(fù)顯示表頭行的步驟詳解

    Java設(shè)置PDF跨頁表格重復(fù)顯示表頭行的步驟詳解

    這篇文章主要給大家介紹了關(guān)于Java設(shè)置PDF跨頁表格重復(fù)顯示表頭行的相關(guān)資料,這里使用的是Free Spire.PDF for Java的jar包,Spire.PDF for Java 是一款專門對 PDF 文檔進行操作的 Java 類庫,需要的朋友可以參考下
    2021-07-07
  • 將本地JAR文件手動添加到Maven本地倉庫的實現(xiàn)過程

    將本地JAR文件手動添加到Maven本地倉庫的實現(xiàn)過程

    在Java開發(fā)中,使用Maven作為項目管理工具已經(jīng)成為了主流的選擇,Maven提供了強大的依賴管理功能,可以輕松地下載和管理項目所需的庫和工具,在某些情況下,你可能會需要將本地下載的JAR文件手動添加到Maven的本地倉庫中,這篇博客將詳細介紹如何實現(xiàn)這一過程
    2024-10-10
  • java后端解決跨域的幾種問題解決

    java后端解決跨域的幾種問題解決

    這篇文章主要介紹了java后端解決跨域的幾種問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • SpringBoot應(yīng)用部署于外置Tomcat容器的方法

    SpringBoot應(yīng)用部署于外置Tomcat容器的方法

    這篇文章主要介紹了SpringBoot應(yīng)用部署于外置Tomcat容器的方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Java實現(xiàn)簡單局域網(wǎng)聊天室

    Java實現(xiàn)簡單局域網(wǎng)聊天室

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單局域網(wǎng)聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 一步步帶你入門Java中File類

    一步步帶你入門Java中File類

    java.io.File類是文件和目錄路徑名的抽象表示形式,主要用于文件和目錄的創(chuàng)建、查找和刪除等操作,下面這篇文章主要給大家介紹了關(guān)于入門Java中File類的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • mybatis中如何實現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句

    mybatis中如何實現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句

    這篇文章主要介紹了mybatis中如何實現(xiàn)一個標(biāo)簽執(zhí)行多個sql語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot中如何統(tǒng)一接口返回與全局異常處理詳解

    SpringBoot中如何統(tǒng)一接口返回與全局異常處理詳解

    全局異常處理是個比較重要的功能,一般在項目里都會用到,這篇文章主要給大家介紹了關(guān)于SpringBoot中如何統(tǒng)一接口返回與全局異常處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • java中定義常量方法介紹

    java中定義常量方法介紹

    java中只有static和非static變量,這個屬于每個類的,如果需要全局變量比如PI(3.14...),可以寫一個類Math,定義static變量PI,調(diào)用Math.PI就可以使用了,這樣就達到我們使用全局變量的目的了
    2013-10-10
  • Kotlin 與 Java基本語法對比

    Kotlin 與 Java基本語法對比

    這篇文章主要介紹了Kotlin 與 Java基本語法對比的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論