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

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

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

String與StringBuilder的效率

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

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

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

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

可以使用可變對(duì)象StringBuilder或者StringBuffer

String result = new StringBuffer().append("abc").append(1).append("def").append(2).toString();
package 可變與不可變的陷阱以及測(cè)試效率;
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)前時(shí)間
		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)前時(shí)間
		System.out.println("String所用內(nèi)存空間" + (num1 - num2));// 所用內(nèi)存空間
		System.out.println("String所用時(shí)間" + (time2 - time1));// 所用時(shí)間
	}
	public static void StringBuilderTime() {
		long num1 = Runtime.getRuntime().freeMemory(); // 獲取系統(tǒng)內(nèi)存剩余空間
		long time1 = System.currentTimeMillis();// 獲取系統(tǒng)當(dāng)前時(shí)間
		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)前時(shí)間
		System.out.println("StringBuilder所用內(nèi)存空間" + (num1 - num2));// 所用內(nèi)存空間
		System.out.println("StringBuilder所用時(shí)間" + (time2 - time1));// 所用時(shí)間
	}
}

在這里插入圖片描述

總結(jié):

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

測(cè)試StringBuffer與StringBuilder的效率

相同點(diǎn):

都是長(zhǎng)度可變的字符串,兩者基本操作相同

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

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

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

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

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

代碼演示

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

結(jié)果:

在這里插入圖片描述

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

結(jié)果:

在這里插入圖片描述

由此可見,StringBuilder確實(shí)是會(huì)比StringBuffer速度更快一些。

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

相關(guān)文章

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

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

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

    將本地JAR文件手動(dòng)添加到Maven本地倉(cāng)庫(kù)的實(shí)現(xiàn)過程

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

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

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

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

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

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

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

    一步步帶你入門Java中File類

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

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

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

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

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

    java中定義常量方法介紹

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

    Kotlin 與 Java基本語(yǔ)法對(duì)比

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

最新評(píng)論