1. 程式人生 > >String拼接效能分析

String拼接效能分析

  String拼接在頻繁使用時,不同方法效能差別較大:

package com.example.ss.hello;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.hello);
        long n = 10000;

        long start1 = System.currentTimeMillis();
        String s1 = new String("hello");
        for (long i = 0; i < n; i++)
        {
            s1 += "拼接--";
        }
        long end1 = System.currentTimeMillis();
        long time1 = end1 - start1;
        tv.setText("用String+=拼接字串的時間:" + time1);

        long start2 = System.currentTimeMillis();
        String s2 = new String("hello");
        for (long i = 0; i < n; i++)
        {
            s2 = s2 + "拼接--";
        }
        long end2 = System.currentTimeMillis();
        long time2 = end2 - start2;
        tv.append("用String=String+拼接字串的時間" + time2);

        long start3 = System.currentTimeMillis();
        String s3 = new String("hello");
        for (long i = 0; i < n; i++)
        {
            s3 = s3.concat("拼接--");
        }
        long end3 = System.currentTimeMillis();
        long time3 = end3 - start3;
        tv.append("用String.concat拼接字串的時間" + time3);

        long start4 = System.currentTimeMillis();
        StringBuffer s4 = new StringBuffer("hello");
        for (long i = 0; i < n; i++)
        {
            s4.append("拼接--");
        }
        long end4 = System.currentTimeMillis();
        long time4 = end4 - start4;
        tv.append("用StringBuffer.append拼接字串的時間" + time4);

        long start5 = System.currentTimeMillis();
        StringBuilder s5 = new StringBuilder("hello");
        for (long i = 0; i < n; i++)
        {
            s5.append("拼接--");
        }
        long end5 = System.currentTimeMillis();
        long time5 = end5 - start5;
        tv.append("用StringBuilder.append拼接字串的時間" + time5);
    }
}

真機執行結果如下


可見使用+= 與使用StringBuilder.append差別達到了指數級。

頻繁使用拼接的操作中若使用+=,則有可能造成頻繁GC,從而產生丟幀的現象。

相關推薦

String拼接效能分析

  String拼接在頻繁使用時,不同方法效能差別較大: package com.example.ss.hello; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; i

java String常量池與字串拼接效能優化

----String常量池---- 1.常量池中的物件從哪裡來的? String s1="hanhan"; String s2="hanhan"; System.out.println(s1==s2);//true 當我們建立String物件採用字面量

java四種字串拼接方式效能分析

前幾天寫一個防重複提交的元件的時候,有一個操作是需要將各個欄位的字串拼接成一個requestKey。看了別人的程式碼,我發現,中介軟體這種東西,每天都要處理幾百幾千萬的請求,但是裡面很多字串拼接的時候還是很原始的“+”號拼接,如果將所有的字串拼接操作都換成更高效

jdk不同版本對String拼接的優化分析

對比jdk5-8所有版本下的反編譯位元組碼,發現結果相同,證明字串拼接從jdk5開始就已經完成了優化,並且沒有進行新的優化。 詳細看反編譯後的位元組碼,8開始進入for迴圈比較階段,11new一個新的StringBuilder,為了優化之後的String+操作。34迴圈結束,重新到5,將會在11重新new一個

軟件工程第三次作業 - 效能分析

字符 耗時 rds words 是否 有變 行存儲 導致 分隔 要求0:以 戰爭與和平 作為輸入文件,重讀向由文件系統讀入。連續三次運行,給出每次消耗時間、CPU參數。 第一次運行結果: 本次程序運行所消耗的時間為1.2秒。 第二次運行結果:

wf效能分析

use new ++ 執行 編譯 -1 arr i++ spa 聽從了老師的建議我請教了其他的同學,修改了代碼實現了功能四,以下是我的效能測試: 1.采用ptime.exe測試的3次截圖 可以看到的是三次執行時間分別為:1.449秒;0.915秒;0.871秒,

2017年軟件工程第三次作業-2效能分析

大於 閃退 font rcp 工作 接下來 原因 char 效果 要求0 以 戰爭與和平 作為輸入文件,重讀向由文件系統讀入。連續三次運行,給出每次消耗時間、CPU參數 首先,我下載ptime.exe,不知道什麽原因我下載下來以後運行老出現閃退現象。一直沒法使用

效能分析

成功 reg 分享 stream png read vs2015 處理文本 idt 效能分析: 首先使用ptime連續運行三次,運行時間截圖如下: 三次平均運行時間:17.535s 猜測程序的瓶頸為: string filename = Console.ReadLi

Java中String、StringBuilder、StringBuffer常用源碼分析及比較(一):String源碼分析

array string類 都是 epo sys 匹配字符串 bound 地址 簡單 String: 一、成員變量: /** The value is used for character storage. */ private final char value[

String初始化與String拼接

運行時 equals方法 直接 b+ args tao 方法 字符串常量 大小 介紹String的的初始化 public class StringDemo{ private static final String MESSAGE="taobao"; public

String源碼分析

長度 null 分析 nta 完成 bounds pty per 字節數組 一、類定義 public final class String implements java.io.Serializable, Comparable<String>, CharSequ

C# 中的 String類型分析

body true println 因此 包括 概念 () 了解 自己 equals方法和==的區別 首先大家知道,String既可以作為一個對象類來使用,又可以作為一個基本類型來使用。這裏指的作為一個基本類型來使用只是指使用方法上的,比如String s = "

第五次作業——python效能分析與幾個問題(個人作業)

結合 撰寫 porting tin 設計實現 cti personal 設計文檔 hub 第五次作業——效能分析與幾個問題(個人作業) 前言 閱讀了大家對於本課程的目標和規劃之後,想必很多同學都躍躍欲試,迫不及待想要提高自身實踐能力,那麽就從第一個個人項目開始吧,題目要求見

[JAVA] String 拼接效率

builder take 一個 code += In char inpu ont 344. Reverse String Write a function that takes a string as input and returns the string revers

關於String源碼分析

長度 boolean indexof valueof replace 源碼分析 拼接 方法 inter 關於String的類定義:  public final class String implements java.io.Serializable, Comparable&

20180925-3 效能分析

出現 ima 函數調用 clas 查詢 string函數 col 運行 core 一、得出程序運行時間 運行截圖如下: 第一次運行時間為 0.942 s 第二次運行時間為 0.826 s 第三次運行時間為 0.861 s 平均運行時間為:0.876 s CPU參數:I

作業 20180925-3 效能分析

count color 正則匹配 str 2.0 height font 9.png 表達式 作業要求: https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145 git地址:https://git.coding.

第三次作業——效能分析

分享圖片 urn ali spl cnblogs ctu 轉換 top 代碼 此作業的要求參見:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145] 該作業git地址為:https://git.coding

作業要求 20180925-3 效能分析

.com odin width cnblogs spa .cn alt net ref 本次作業要求參見: https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145 由於上次作業沒有實現功能4,具體的代碼還在做,在

CSS動畫的效能分析和瀏覽器GPU加速

此文已由作者袁申授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 有數的資料大屏可以在一塊螢幕上展示若干張不同的圖表,以炫酷的方式展示各種業務資料。其中有些圖表使用CSS實現了餅圖輪播、地圖示記點閃爍等動畫,然而在一張大屏上同時顯示了許多張圖表時,持續的動畫效果有時會出現掉幀、卡頓的