Java--String、StringBuilder及StringBuffer区别及性能对比

哈喽,欢迎进来学习的小伙伴~

【学习背景】

本文会通过OpenJDK提供的Java性能测试工具JMH来测试下StringStringBuilderStringBuffer拼接字符串的效率如何~
关于JMH的介绍及具体使用,我的这篇博文中有介绍:

Java–☀️面试官:LinkedList真的比ArrayList添加元素快?❤️‍本文通过Open JDK JMH带你揭开真相《⭐建议收藏⭐》

当然,除了验证三者的字符串拼接效率之外,还会对这三者的特性及常见面试问题进行分析和总结,希望加深自己对这三者的认知,分享出来,也希望能帮助到有需要的小伙伴~

进入正文~~



一、性能测试

1.1 代码实现

分别编写String、StringBuilder及StringBuffer的JMH基准单元测试方法:
StringAppendJmhTest.java

package com.justin.java;

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@BenchmarkMode(Mode.AverageTime) //基准测试类型:time/ops(每次调用的平均时间)
@OutputTimeUnit(TimeUnit.NANOSECONDS) //基准测试结果的时间类型:微秒
@Warmup(iterations = 5) //预热:5 轮
@Measurement(iterations = 5) //度量:测试5轮
@Fork(3) //Fork出3个线程来测试
@State(Scope.Thread) // 每个测试线程分配1个实例
public class StringAppendJmhTest {
   
    @Param({
   "2", "10", "100", "1000"})
    private int count; //指定添加元素的不同个数,便于分析结果

    @Setup(Level.Trial) // 初始化方法,在全部Benchmark运行之前进行
    public void init() {
   
        System.out.println("Start...");
    }

    public static void main(
评论 246
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾日三省贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值