iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java代码中字符串拼接方式有哪些
  • 447
分享到

Java代码中字符串拼接方式有哪些

2023-06-29 04:06:08 447人浏览 安东尼
摘要

这篇文章主要为大家展示了“Java代码中字符串拼接方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java代码中字符串拼接方式有哪些”这篇文章吧。分析过程环境系统: windows 10

这篇文章主要为大家展示了“Java代码中字符串拼接方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java代码中字符串拼接方式有哪些”这篇文章吧。

分析过程

环境

分析用示例代码:

@Slf4jpublic class StrinGConcat {    @SneakyThrows    public static void main(String[] args) {        log.info("java虚拟机预热开始");        String[] strs = new String[6000000];        for (int i = 0; i < strs.length; i++) {            strs[i] = id();        }        loopStringJoiner(strs);        loopStringJoin(strs);        loopStringBuilder(strs);        log.info("java虚拟机预热结束");        Thread.sleep(1000);        log.info("开始测试:");        Thread.sleep(1000);        Stopwatch stopwatchLoopPlus = Stopwatch.createStarted();//        loopPlus(strs);        log.info("loop-plus: " + stopwatchLoopPlus.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchLoopStringBuilderCapacity = Stopwatch.createStarted();        loopStringBuilderCapacity(strs);        log.info("loop-stringBuilderCapacity: " + stopwatchLoopStringBuilderCapacity.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchLoopStringBuilder = Stopwatch.createStarted();        loopStringBuilder(strs);        log.info("loop-stringBuilder: " + stopwatchLoopStringBuilder.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchLoopJoin = Stopwatch.createStarted();        loopStringJoin(strs);        log.info("loop-String.join: " + stopwatchLoopJoin.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchLoopStringJoiner = Stopwatch.createStarted();        loopStringJoiner(strs);        log.info("loop-stringJoiner: " + stopwatchLoopStringJoiner.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchSimplePlus = Stopwatch.createStarted();        for (int i = 0; i < 500000; i++) {            simplePlus(id(), id(), id());        }        log.info("simple-Plus: " + stopwatchSimplePlus.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchSimpleStringBuilder = Stopwatch.createStarted();        for (int i = 0; i < 500000; i++) {            simpleStringBuilder(id(), id(), id());        }        log.info("simple-StringBuilder: " + stopwatchSimpleStringBuilder.elapsed(TimeUnit.MILLISECONDS));        Thread.sleep(1000);        Stopwatch stopwatchSimpleStringBuffer = Stopwatch.createStarted();        for (int i = 0; i < 500000; i++) {            simpleStringBuffer(id(), id(), id());        }        log.info("simple-StringBuffer: " + stopwatchSimpleStringBuffer.elapsed(TimeUnit.MILLISECONDS));    }    private static String loopPlus(String[] strs) {        String str = "";        for (String s : strs) {            str = str + "+" + s;        }        return str;    }    private static String loopStringBuilder(String[] strs) {        StringBuilder str = new StringBuilder();        for (String s : strs) {            str.append("+");            str.append(s);        }        return str.toString();    }    private static String loopStringBuilderCapacity(String[] strs) {        StringBuilder str = new StringBuilder(strs[0].length() * strs.length);        for (String s : strs) {            str.append("+");            str.append(s);        }        return str.toString();    }    private static String loopStringJoin(String[] strs) {        StringJoiner joiner = new StringJoiner("+");        for (String str : strs) {            joiner.add(str);        }        return joiner.toString();    }    private static String loopStringJoiner(String[] strs) {        return String.join("+", strs);    }    private static String simplePlus(String a, String b, String c) {        return a + "+" + b + "+" + c;    }    private static String simpleStringBuilder(String a, String b, String c) {        StringBuilder builder = new StringBuilder();        builder.append(a);        builder.append("+");        builder.append(b);        builder.append("+");        builder.append(c);        return builder.toString();    }    private static String simpleStringBuffer(String a, String b, String c) {        StringBuffer buffer = new StringBuffer();        buffer.append(a);        buffer.append("+");        buffer.append(b);        buffer.append("+");        buffer.append(c);        return buffer.toString();    }    private static String id() {        return UUID.randomUUID().toString();    }}

结果及总结

- java虚拟机预热开始
- java虚拟机预热结束
- 开始测试:
- loop-plus: 执行超时
- loop-stringBuilderCapacity: 285
- loop-stringBuilder: 1968
- loop-String.join: 1313
- loop-stringJoiner: 1238
- simple-Plus: 812
- simple-StringBuilder: 840
- simple-StringBuffer: 857

  • 多次测试,可发现在字符串循环拼接场景下,直接使用“+”号性能最低,有初始容量的StringBuilder性能最高,其他方式性能均没有太大差异。

  • 多次测试,可发现在字符串简单拼接场景下,使用“+”号、StringBuilder、StringBuffer性能差距在5%左右,可理解为测试误差,可认为三种方式性能一致。

代码及结果分析

StringBuilder与StringBuffer对比

在无争抢共享资源的场景下,JVM会使用偏向等方法优化,甚至会进行锁消除,使用Synchronized关键词与否,性能并无明显差异。

字节码分析

对比上述#simplePlus和#simpleStringBuilder两个方法的字节码,可明显看到两方法执行内容基本一致,但是直接使用"+"号时处理流程更短,可见编译器进行了深度优化,使用优化后的字节码理论上会有更高的性能:

  // access flags 0xA  private static simplePlus(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;    // parameter  a    // parameter  b    // parameter  c   L0    LINENUMBER 125 L0    NEW java/lang/StringBuilder    DUP    INVOKESPECIAL java/lang/StringBuilder.<init> ()V    ALOAD 0    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    LDC "+"    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    ALOAD 1    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    LDC "+"    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    ALOAD 2    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;    ARETURN   L1    LOCALVARIABLE a Ljava/lang/String; L0 L1 0    LOCALVARIABLE b Ljava/lang/String; L0 L1 1    LOCALVARIABLE c Ljava/lang/String; L0 L1 2    MAXSTACK = 2    MAXLOCALS = 3  // access flags 0xA  private static simpleStringBuilder(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;    // parameter  a    // parameter  b    // parameter  c   L0    LINENUMBER 129 L0    NEW java/lang/StringBuilder    DUP    INVOKESPECIAL java/lang/StringBuilder.<init> ()V    ASTORE 3   L1    LINENUMBER 130 L1    ALOAD 3    ALOAD 0    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    POP   L2    LINENUMBER 131 L2    ALOAD 3    LDC "+"    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    POP   L3    LINENUMBER 132 L3    ALOAD 3    ALOAD 1    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    POP   L4    LINENUMBER 133 L4    ALOAD 3    LDC "+"    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    POP   L5    LINENUMBER 134 L5    ALOAD 3    ALOAD 2    INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;    POP   L6    LINENUMBER 135 L6    ALOAD 3    INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;    ARETURN   L7    LOCALVARIABLE a Ljava/lang/String; L0 L7 0    LOCALVARIABLE b Ljava/lang/String; L0 L7 1    LOCALVARIABLE c Ljava/lang/String; L0 L7 2    LOCALVARIABLE builder Ljava/lang/StringBuilder; L1 L7 3    MAXSTACK = 2    MAXLOCALS = 4

以上是“Java代码中字符串拼接方式有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Java代码中字符串拼接方式有哪些

本文链接: https://www.lsjlt.com/news/322510.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java代码中字符串拼接方式有哪些
    这篇文章主要为大家展示了“Java代码中字符串拼接方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java代码中字符串拼接方式有哪些”这篇文章吧。分析过程环境系统: windows 10...
    99+
    2023-06-29
  • java中拼接字符串有哪些方法
    这篇文章给大家分享的是有关java中拼接字符串有哪些方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。示例代码public class Test {  List&...
    99+
    2023-05-30
  • Java中字符串常见的拼接方式有哪些
    这篇“Java中字符串常见的拼接方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中字符串常见的拼接方式有哪些...
    99+
    2023-07-05
  • Java字符串拼接的方法有哪些
    这篇文章主要为大家展示了“Java字符串拼接的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java字符串拼接的方法有哪些”这篇文章吧。> 字符串拼接一般使用“+”,但是“+”不...
    99+
    2023-06-22
  • Java代码中4种字符串拼接方式分析
    目录结论最佳实践分析过程环境分析用示例代码:代码及结果分析本文研讨的字符串拼接方式为以下4种:“+”号、StringBuilder、StringJoiner、...
    99+
    2022-11-13
  • Java中拼接字符串String的方法有哪些
    这篇文章主要介绍“Java中拼接字符串String的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中拼接字符串String的方法有哪些”文章能帮助大家解决问题。1. 前言Java ...
    99+
    2023-06-29
  • go语言中字符串的拼接方式有哪些
    本篇内容主要讲解“go语言中字符串的拼接方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言中字符串的拼接方式有哪些”吧!+拼接方式这种方式是我在写golang经常用的方式,go语言...
    99+
    2023-06-22
  • Python中的字符串拼接方法有哪些?
    Python中的字符串拼接方法有很多,本文将介绍几种常用的方法,并提供相应的代码示例。这些方法包括使用"+"符号、使用join()方法、使用format()方法以及使用f-string。使用"+"符号拼接字符串:这是一种最简单直接的方法,只...
    99+
    2023-10-22
    字符串拼接方法: 使用指定的分隔符。
  • es6中拼接字符串的方法有哪些
    这篇“es6中拼接字符串的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6中...
    99+
    2022-10-19
  • python中有哪些拼接字符串的方法
    python中拼接字符串的方法有:1.直接连接;2.使用加号连接;3.使用逗号连接;4.使用%连接;5.使用format连接;6.使用f-string方式连接;7.使用join方法连接;python中拼接字符串的方法有以下几种直接连接字符串...
    99+
    2022-10-14
  • python中字符串的拼接方法有哪些
    在Python中,字符串的拼接可以使用以下几种方法:1. 使用"+"运算符进行拼接:```pythonstr1 = "Hello"s...
    99+
    2023-08-18
    python
  • python字符串拼接的方法有哪些
    这篇文章主要介绍python字符串拼接的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twist...
    99+
    2023-06-14
  • Java中字符串常见的一些拼接方式总结
    目录方式一:+ 最常见的方式方式二:StringBuilder.append()和StringBuffer.append()方式三:String类下的cocat()方法方式四:Str...
    99+
    2023-05-14
    java字符串拼接的几种方式 JAVA字符串拼接 java字符串拼接的方法
  • Java中字符串占位替换、字符串拼接、字符串与Collection互转的方式
    场景 字符串占位替换 String.format 最原始最基础的方式。 使用%来表示占位,后面跟上不同的标识符,用于限定这个占位符的参数类型,由jdk原生提供支持。 示例:         String badao = String.for...
    99+
    2023-09-03
    java servlet 开发语言
  • Python中的字符串切割和拼接方法有哪些?
    Python中的字符串切割和拼接方法有很多种,下面将介绍其中常用的方法,并附上代码示例。使用split()方法进行字符串切割split()方法可以根据指定的分隔符将字符串切割成多个部分,返回一个包含切割后部分的列表。str1 = "...
    99+
    2023-10-25
    字符串 拼接 切割
  • JavaScript中有哪些字符串连接方式
    今天就跟大家聊聊有关JavaScript中有哪些字符串连接方式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript是什么JS是JavaScript的简称,它是一种直译式...
    99+
    2023-06-14
  • Java字符串拼接的优雅方式实例详解
    目录背景String底层原理拼接的方法经典但有时不优雅的 +优点缺点业务一万能的StringBuilder线程安全的StringBuffer灵活的String.format()有点绿...
    99+
    2022-11-12
  • Java中常见字符串拼接九种方式,总有一款你喜欢!
    一、前言 在 Java 编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接 SQL 语句、构建 HTTP 请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问...
    99+
    2023-08-30
    java jvm
  • 五种方式:Python中拼接字符串的正确方法
    在学习Python的过程中, 在拼接字符串的时候遇到了些问题, 所以抽点时间整理一下Python 拼接字符串的几种方式。 方式1:使用加号(+)连接 使用加号连接各个变量或者元素必须是字符串类型...
    99+
    2023-09-02
    python 开发语言 pycharm
  • Java中拼接字符串String的N种方法总结
    目录1. 前言2. 问题复现3. 使用 + 运算符4. 使用 String.concat()5. 使用 StringBuilder6. 使用 StringJoiner 类 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作