Java中String.format,StringBuilder,加号拼接字符串效率

 

    @Test
    public void testFormat(){
        Integer loop = 1000000;
        Integer timeScale = 1000*1000;
        long time = System.nanoTime();
        for(int i=0;i<loop;i++){
            String s = "hello "+ i +"word";
            int size = s.length();
        }
        time = System.nanoTime() - time;
        System.out.println("加号拼接:  "+time+"ns"+"\t"+time/timeScale+"ms");

        time = System.nanoTime();
        for(int i=0;i<loop;i++){
            StringBuilder s = new StringBuilder();
            s.append("hello ").append(i).append("word");
            int size = s.length();
        }
        time = System.nanoTime() - time;
        System.out.println("使用Builer:"+time+"ns"+"\t"+time/timeScale+"ms");

        time = System.nanoTime();
        for(int i=0;i<loop;i++){
            String s = String.format("%s %d %s","hello",i,"word");
            int size = s.length();
        }
        time = System.nanoTime() - time;
        System.out.println("使用format:"+time+"ns"+"\t"+time/timeScale+"ms");
    }

输出结果:

#10000
加号拼接:  5066970ns	   5ms
使用Builer:4961695ns	   4ms
使用format:94398046ns	94ms


#100000
加号拼接:  32604006ns	32ms
使用Builer:11622116ns	11ms
使用format:401532390ns	401ms

#1000000
加号拼接:  86900437ns	86ms
使用Builer:51769362ns	51ms
使用format:2209215837ns	2209ms

可以看到加号和StringBuiler性能差不多,format方式性能差了两个数量级

 

 

 

<think>嗯,用户问的是Java中如何拼接字符串,我需要详细介绍一下。首先得想到Java字符串拼接的几种常见方法,比如用加号StringBuilderStringBuffer,还有concat方法,或者StringJoiner。然后每个方法的具体用法和区别,以及适用的场景。 用户可能是刚开始学Java,所以需要解释得清楚一些,最好有例子。可能他们想知道哪种方法效率更高,尤其是在循环中或者大量拼接的时候,这时候用加号可能不太好,因为会生成很多中间对象,影响性能,这时候应该推荐StringBuilder。 另外,Java版本的问题,比如StringJoiner是Java8引入的,如果用户用的是旧版本可能用不了。不过现在大部分应该用Java8以上,所以可以提一下。 还要注意线程安全的问题,比如StringBuffer是线程安全的,但效率低,而StringBuilder非线程安全但更快。所以根据场景选择。 例子的话,每个方法都举一个简单的例子,说明怎么用。比如用加号直接拼接StringBuilder的append方法,StringBuffer类似,concat方法的使用,以及StringJoiner在需要分隔符的时候怎么用。 最后做个总结,比较各种方法的优缺点,帮助用户根据不同的情况选择合适的方式。可能用户实际应用中,简单的拼接加号,循环里用StringBuilder,需要分隔符用StringJoiner,多线程环境下用StringBuffer之类的。</think>在 Java 中,字符串拼接是常见的操作,以下是几种常用的方法及其适用场景: --- ### 1. **使用 `+` 运算符** 最简单直接的方式,但频繁操作时效率较低(每次拼接会生成新对象)。 ```java String str1 = "Hello"; String str2 = "World"; String result = str1 + ", " + str2; // 输出 "Hello, World" ``` --- ### 2. **`StringBuilder`(非线程安全,高效)** 适用于频繁修改字符串的场景(如循环中),性能最佳。 ```java StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(", "); sb.append("World"); String result = sb.toString(); // 输出 "Hello, World" ``` --- ### 3. **`StringBuffer`(线程安全,效率略低)** 与 `StringBuilder` 类似,但线程安全,适用于多线程环境。 ```java StringBuffer sb = new StringBuffer(); sb.append("Hello"); sb.append(", "); sb.append("World"); String result = sb.toString(); ``` --- ### 4. **`String.concat()` 方法** 适用于少量拼接,语法简洁但不如 `StringBuilder` 高效。 ```java String str = "Hello"; str = str.concat(", ").concat("World"); // 输出 "Hello, World" ``` --- ### 5. **`String.format()` 或 `String.join()`** - **`String.format()`**:格式化拼接(类似 C 语言的 `printf`)。 ```java String name = "Alice"; String result = String.format("Name: %s, Age: %d", name, 30); ``` - **`String.join()`**:拼接集合或数组元素(可指定分隔符)。 ```java String[] arr = {"A", "B", "C"}; String result = String.join("-", arr); // 输出 "A-B-C" ``` --- ### 6. **`StringJoiner`(Java 8+)** 专门用于拼接带有分隔符的字符串,支持前缀和后缀。 ```java StringJoiner joiner = new StringJoiner(", ", "[", "]"); joiner.add("Apple"); joiner.add("Banana"); String result = joiner.toString(); // 输出 "[Apple, Banana]" ``` --- ### **性能建议** - **简单拼接**:少量操作时用 `+` 或 `concat()`。 - **循环或大量拼接**:优先用 `StringBuilder`。 - **格式化输出**:用 `String.format()`。 - **带分隔符的集合**:用 `String.join()` 或 `StringJoiner`。 掌握这些方法后,可以根据具体场景选择最高效的方式!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值