為什麼不建議在for迴圈中使用"+"進行字串拼接
常用的字串拼接方式有五種,分別是使用+
、使用concat
、使用StringBuilder
、使用StringBuffer
以及使用StringUtils.join
。
用時從短到長的對比:StringBuilder < StringBuffer < concat < + < StringUtils.join
由於字串拼接過程中會建立新的物件,所以如果要在一個迴圈體中進行字串拼接,就要考慮記憶體問題和效率問題。
而“+”反編譯後的程式碼,在for
迴圈中,每次都是new
了一個StringBuilder
,然後再把String
轉成StringBuilder
,再進行append
。
而頻繁的新建物件當然要耗費很多時間了,不僅僅會耗費時間,頻繁的建立物件,還會造成記憶體資源的浪費。
因此,經過對比發現,直接使用StringBuilder
的方式是效率最高的。因為StringBuilder
天生就是設計來定義可變字串和字串的變化操作的。
但是,還要強調的是:
1、如果不是在迴圈體中進行字串拼接的話,直接使用+
就好了。
2、如果在併發場景中進行字串拼接的話,要使用StringBuffer
來代替StringBuilder
。
相關推薦
為什麼不建議在for迴圈中使用"+"進行字串拼接
常用的字串拼接方式有五種,分別是使用+、使用concat、使用StringBuilder、使用StringBuffer以及使用StringUtils.join。 用時從短到長的對比:StringBuilder < StringBuffer < concat < + < StringU
for迴圈中刪除,資料不正確
背景:在寫業務程式碼的時候,需要篩選list中符合條件的物件 ,for迴圈不能奏效,當時的處理方法是,將刪除的index存放在陣列中,然後再倒序刪除原list中的資料。現在來試一下各種方法迴圈刪除的功能。 List<Map<String,Object>
for迴圈中進行Promise非同步操作的問題總結
筆者在for迴圈中進行Promise非同步操作的時候,主要會遇到兩個問題: 一是如何讓所有的for迴圈中的Promise操作結束後執行某個操作 二是迴圈中如果後一個Promise的執行依賴與前一個Promise的執行結果(例如對於某個資料庫操作
C++中用for迴圈中對多幅影象進行同樣的處理
問題描述: 有n幅圖,命名分別為Image1.tif,Image2.tif ... ... Imagen.tif 現在要在一個for迴圈中對每幅影象進行同樣的處理,如灰度化,二值化等,需要用到函式
為什麼阿里巴巴Java開發手冊中不建議在迴圈體中使用+進行字串拼接?
之前在閱讀《阿里巴巴Java開發手冊》時,發現有一條是關於迴圈體中字串拼接的建議,具體內容如下: 那麼我們首先來用例子來看看在迴圈體中用 + 或者用 StringBuilder 進行字串拼接的效率如何吧(JDK版本為 jdk1.8.0_201)。 package com.wupx.demo; /**
jsrender在for迴圈中獲取上級資料
使用~root可以在模板中訪問到頂層資料,從頂層資料往下就可以訪問到所有資料了,如下: <script id="item-list" type="text/x-jsrender"> {{for items}} {{if ~root.type == "pi
JS基礎 關於閉包在for迴圈中的使用
主要是針對ES5的語法,因為ES6中有塊級作用域了(儘管我不知道為什麼我還一直在用es5的語法) 先展示一段問題程式碼 1 for (var i = 0; i < data.length; i++) { 2 var $btn=$('#iBtn'); 3 $btn.on('c
JS獲取for迴圈中i的實時值
最近在完成燈箱效果時,需要獲取for迴圈中i的實時值來定位大圖輪播的索引,但最初獲得的是i的最大值 幾種獲取for迴圈中i的實時值方法: 自調: for (var i = 0; i < itemli.length; i++) { (function (arg) {
【轉載】 for迴圈中i++與++i的效率探究
原文連結:https://blog.csdn.net/zy1691/article/details/4849808?utm_source=blogxgwz1 for(int i=0;i<=50;i++) 我們經常會使用這樣的程式碼來做迴圈,一般在for迴圈中習慣於
RETURN的用法是什麼?若用在FOR迴圈中,還會執行下一次迴圈嗎?
這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【return的用法是什麼?若在for迴圈中,還會執行下一次迴圈嗎?】 【修真院web小課堂
數模必備:利用ggplot2在地圖上連線(不使用for迴圈)
最近由於自己的時間關係,很久沒有發一些乾貨了。這次想談談之前我們在進行數學建模時,如何將設計好的最優路徑,利用ggplot2在地圖上進行繪製與展示。 最簡單的方法是使用plot繪圖,然後再使用lines函式一條一條地將線加上去,但是一條一條加上去的過程中,需要使用for迴圈不說,而且繪製
Java for迴圈中設定停頓 邏輯程式碼中同樣適用
for (Object object : jsonArray) { Thread.currentThread().sleep(1000); list.add(((JSONObject)object).get("Name")); } 此處的停頓 適用於邏輯程式碼和迴圈 1
對於for迴圈中的continue語句的使用
C++Primer.171頁:continue語句終止最近的迴圈中的當前迭代並立即開始下一次迭代。 #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc
Linux gcc for 迴圈中 i=i++ 會造成死迴圈問題及 ++i / i++ 彙編分析
在把 Windows 程式移植到 Linux 時遇到了死迴圈,最後定位到了類似這種的語句 for (i = 0; i < 1; i = i++), 別問我是誰寫的,為什麼這麼寫(淚目!)。 根據我自己的感覺, i = i++ 應該等價於 i++(C標準中 i=i++ 的行為未
async/await - 8.在for迴圈中正確的使用await
async/await - 8.在for迴圈中正確的使用await const fetch = require('node-fetch') const bluebird = require('bluebird') async function getZhihuColumn(id) { awai
java for迴圈中使用克隆代替new物件
public class User implements Cloneable { private Integer age; private String name; pub
for迴圈中控制cp原始碼出售事務單個提交問題
最近有個業務是for迴圈裡面,cp原始碼出售《企娥21717 93408》迴圈一次業務提交一次,過程中發現事務不能提交,總結一下這個問題 第一點: 我用的是通用mapper,用到他的updateByPrimaryKeySelective方法,這個方法必須設定主鍵,不然他的where後面會帶上所有欄位造成s
for迴圈中移除元素問題
java list移除新增元素操作 for迴圈中移除元素一般會報錯 java.util.ConcurrentModificationException 還是建議用iterator 之前自己寫過有個邏輯用
在for迴圈中動態拼接字串和新增事件
不多說,直接開始 ES6之前常用寫法: for(var i = 0;i<10;i++){ /閉包寫法 (function(j){ var a = document.createElement("div");
獲取Python的簡單for迴圈中索引的問題
Python的for迴圈相比其他語言而言更加簡單,比如經常會有如下這樣類似的例子。我們可以直接對列表進行遍歷,獲取列表的某個元素,並對這個元素進行相應的操作。 testList = ['nice', 'to', 'meet', 'you'] for x in test