最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

String與StringBuilder的效率

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

不可變,拼接的多會(huì)產(chǎn)生多個(gè)新的對象,十分的耗費(fèi)內(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)前時(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)生大量對象耗費(fèi)內(nèi)存以及執(zhí)行效率,所以在開發(fā)中建議使用StringBuilder進(jìn)行字符串拼接

測試StringBuffer與StringBuilder的效率

相同點(diǎn):

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

兩者主要區(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();//開始計(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)文章

  • Spring?Cloud?Eureka?搭建?&?集群方式

    Spring?Cloud?Eureka?搭建?&?集群方式

    這篇文章主要介紹了Spring?Cloud?Eureka?搭建?&?集群方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringMVC中重定向model值的獲取方式

    SpringMVC中重定向model值的獲取方式

    這篇文章主要介紹了SpringMVC中重定向model值的獲取方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • RocketMQ線程池創(chuàng)建實(shí)現(xiàn)原理詳解

    RocketMQ線程池創(chuàng)建實(shí)現(xiàn)原理詳解

    這篇文章主要為大家介紹了RocketMQ線程池創(chuàng)建實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java實(shí)現(xiàn)Random隨機(jī)數(shù)生成雙色球號碼

    Java實(shí)現(xiàn)Random隨機(jī)數(shù)生成雙色球號碼

    使用Random類是Java中用于生成隨機(jī)數(shù)的標(biāo)準(zhǔn)類,本文主要介紹了Java實(shí)現(xiàn)Random隨機(jī)數(shù)生成雙色球號碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • JVM參數(shù)NativeMemoryTracking的使用

    JVM參數(shù)NativeMemoryTracking的使用

    本文主要介紹了JVM參數(shù)NativeMemoryTracking的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Spring零基礎(chǔ)到進(jìn)階之使用方法詳解

    Spring零基礎(chǔ)到進(jìn)階之使用方法詳解

    Spring框架是一個(gè)開放源代碼的J2EE應(yīng)用程序框架,由Rod?Johnson發(fā)起,是針對bean的生命周期進(jìn)行管理的輕量級容器(lightweight?container)。?Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問題,提供了功能強(qiáng)大IOC、AOP及Web?MVC等功能
    2022-07-07
  • idea2020.3.3集成maven及遇到的坑(推薦)

    idea2020.3.3集成maven及遇到的坑(推薦)

    這篇文章主要介紹了idea2020.3.3集成maven的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案

    SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案

    這篇文章主要介紹了SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決從Map、JSONObject取不存在鍵值對時(shí)的異常情況

    解決從Map、JSONObject取不存在鍵值對時(shí)的異常情況

    這篇文章主要介紹了解決從Map、JSONObject取不存在鍵值對時(shí)的異常情況,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java線程安全中的有序性淺析

    Java線程安全中的有序性淺析

    這篇文章主要介紹了Java線程安全中的有序性,在開發(fā)中,我們通常按照從上到下的順序編寫程序指令,并且希望cpu和編譯器按照我們預(yù)先編寫的順序去執(zhí)。但往往cpu和編譯器為了提高性能、優(yōu)化指令的執(zhí)行順序,會(huì)將我們編寫好的程序指令進(jìn)行重排序
    2023-02-02

最新評論

乡城县| 天津市| 莆田市| 广德县| 富锦市| 桂东县| 南乐县| 连江县| 莱芜市| 安义县| 大安市| 拉萨市| 金沙县| 洞头县| 万载县| 宝兴县| 吉木乃县| 淳安县| 大悟县| 介休市| 临泉县| 东明县| 惠东县| 民勤县| 华坪县| 曲靖市| 枣阳市| 漳州市| 浦北县| 当涂县| 雷波县| 察隅县| 日喀则市| 兴文县| 通化县| 台前县| 西平县| 竹溪县| 赤水市| 辰溪县| 台东市|