国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java字符串連接性能分析

2019-11-06 07:59:25
字體:
來源:轉載
供稿:網友
字符串連接一向是比較常用的 ,異常日志輸出或者是文字的組裝等等,因此需要去思考選擇哪種方法性能最高假設我們需要連接strA 和 strB 常用的幾種字符串組裝方式如下:1.String.format("%s%s",strA,strB)2.srtA + strB3.strA.concat(strB)4.new StringBuilder(strA).append(strB)5.new StringBuffer(strA).appedn(strB)這幾種有什么差別,1、String.format 通過匹配占位符的方式,往字符串里面插入參數值,而這種實現方法比一般的連接字符串方式耗時更長不過有時候format這種方式的可讀性更好,通過占位符還可以指定插入的參數類型2、+操作符連接字符串實際上是調用StringBuilder.append,但是通過+連接的每個字符串都是一個新的對象,類似String result = "Hello " + "world"; 實際上為了得到一個字符串而創建了3個String對象,剩余的2個對象就交給了GC,但是如果遇到更多的字符串連接,或者是循環調用,使用+操作符進行連接會導致大量的String對象讓GC去處理 //以下兩者是等價的s = i + ""s = String.valueOf(i);//以下兩者也是等價的s = "abc" + i;s = new StringBuilder("abc").append(i).toString();3、contat源碼實現則是通過拷貝當前字符串的char[]成員變量,然后進行擴容,之后再將拼接字符串拷貝進去,開銷挺大每次操作都會產生一個新的String對象4、StringBuilder只新建了一個對象,通過查看源碼可以看到內部有一個char[]類型的動態數組來存儲字符串。很顯然StringBuilder在開銷方面更小5、StringBuffer則是線程安全的StringBuilder寫個簡單的程序對比一下字符串連接的性能:
/* * Copyright (C) 2009-2016 Hangzhou 2Dfire Technology Co., Ltd.All rights reserved */package com.twofire.wechat.service;/** * StringCombineCostTimeTest * * @author shinan * @since 2017-03-03 */public class StringCombineCostTimeTest {    PRivate static String request = "request";    private static String result = "result";    public static void combineTimeCost(int count) {        combineByStringFormat(count);        combineByStringPlusOperator(count);        combineByStringBuilder(count);        combineByStringConcat(count);        System.out.println("---------------------------------------");    }    public static void combineByStringFormat(int count) {        long start = System.currentTimeMillis();        for (int i = 0; i< count;i++) {            String combineResult =  String.format("request = %s, result = %s", request, result);        }        long end = System.currentTimeMillis();        long cost = end - start;        System.out.println(count + " combine String.format cost : " + cost);    }    public static void combineByStringPlusOperator(int count) {        long start = System.currentTimeMillis();        for (int i = 0; i< count;i++) {            String combineResult = "request = " + request + " result = " + result;        }        long end = System.currentTimeMillis();        long cost = end - start;        System.out.println(count + " combine String add cost : " + cost);    }    public static void combineByStringBuilder(int count) {        long start = System.currentTimeMillis();        for (int i = 0; i< count;i++) {            StringBuilder stringBuilder = new StringBuilder();            stringBuilder.append("request = ").append(request).append(" result = ")                    .append(result);        }        long end = System.currentTimeMillis();        long cost = end - start;        System.out.println(count + " combine StringBuilder cost : " + cost);    }    public static void combineByStringConcat(int count) {        long start = System.currentTimeMillis();        for (int i = 0; i< count;i++) {            String str = "";            str.concat("request = ").concat(request).concat(" result = ").concat(result);        }        long end = System.currentTimeMillis();        long cost = end - start;        System.out.println(count + " combine Concat cost : " + cost);    }    public static void main(String[] args){        combineTimeCost(1000000);        combineTimeCost(1000000);        combineTimeCost(1000000);    }}耗時統計:String.format耗時最長concat中等,+和StringBuilder較為接近即時在做最簡單的拼接時,如果我們不想創建StringBuffer或StringBuilder實例的時候可以使用concat。但是對于大量的字符串拼接操作,我們就不應該使用concat,因為concat會降低程序的性能,消耗cpu。因此,在不考慮線程安全和同步的情況下,為了獲得最高的性能,我們應盡量使用StringBuilder
上一篇:javaweb的學習路線

下一篇:java機試-抽獎

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 搜索| 潮州市| 洛宁县| 望奎县| 江华| 湘阴县| 金阳县| 小金县| 乐东| 南昌县| 许昌县| 桦南县| 涞水县| 登封市| 西贡区| 巴楚县| 双城市| 商城县| 沛县| 玉龙| 屯昌县| 阜康市| 宜兰县| 宝兴县| 淮阳县| 咸宁市| 寿阳县| 安溪县| 资源县| 平塘县| 古蔺县| 澳门| 富裕县| 砀山县| 茂名市| 车致| 宾阳县| 锦州市| 鹤峰县| 通海县| 镇平县|