美文网首页
字符串拼接详解

字符串拼接详解

作者: jsjack_wang | 来源:发表于2017-12-28 12:37 被阅读0次
1.使用 + 拼接字符串详解
// 源码
public class Demo02 {
    public static void main(String[] args) {
        String sb = new String();
        for (int i = 0; i < 10; i ++){
            sb += i;
        }
        System.out.println(sb);
    }
}

// 字节码(javac Demo02.java,javap -c Demo02.class)
Compiled from "Demo02.java"
public class Demo02 {
  public Demo02();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class java/lang/String
       3: dup
       4: invokespecial #3                  // Method java/lang/String."<init>":()V
       7: astore_1
       8: iconst_0
       9: istore_2
      10: iload_2
      11: bipush        10
      13: if_icmpge     41
      16: new           #4                  // class java/lang/StringBuilder
      19: dup
      20: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V
      23: aload_1
      24: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      27: iload_2
      28: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      34: astore_1
      35: iinc          2, 1
      38: goto          10
      41: getstatic     #9                  // Field java/lang/System.out:Ljava/io/PrintStream;
      44: aload_1
      45: invokevirtual #10                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      48: return
}
2.使用StringBuilder拼接字符串详解
// 源码
public class Demo01 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i ++){
            sb.append(i);
        }
        System.out.println(sb.toString());
    }
}

// 字节码(javac Demo01.java,javap -c Demo01.class)
Compiled from "Demo01.java"
public class Demo01 {
  public Demo01();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class java/lang/StringBuilder
       3: dup
       4: invokespecial #3                  // Method java/lang/StringBuilder."<init>":()V
       7: astore_1
       8: iconst_0
       9: istore_2
      10: iload_2
      11: bipush        10
      13: if_icmpge     28
      16: aload_1
      17: iload_2
      18: invokevirtual #4                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      21: pop
      22: iinc          2, 1
      25: goto          10
      28: getstatic     #5                  // Field java/lang/System.out:Ljava/io/PrintStream;
      31: aload_1
      32: invokevirtual #6                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      35: invokevirtual #7                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      38: return
}

总结

对比字节码,我们会发现 + 拼接已经用StringBuilder优化,但是 + 每拼接一次就会比直接用StringBuilder多创建一个对象多调用一次toString,效率比较低创建多余对象,所以还是推荐使用StringBuilder。

相关文章

  • 字符串拼接详解

    1.使用 + 拼接字符串详解 2.使用StringBuilder拼接字符串详解 总结

  • MySQL相关文章索引(6)

    基本常识 mysql之TIMESTAMP(时间戳)用法详解 MySQLdump常用命令 SQL中字符串拼接 Nav...

  • R 包学习 - stringr()

    stringr: R 语言字符串处理包 字符串拼接函数str_c: 字符串拼接。str_join: 字符串拼接,同...

  • Swift5.0 字符串(String)详解

    1.字符串拼接 + 拼接 \() 拼接 2.字符串是否为空判断 3.字符串长度 4.字符串比较 == > < 5....

  • 字符串

    遍历 拼接 字符串拼接格式化 字符串的截取

  • Python 字符串详解

    字符串替换 字符串拼接 1.两个字符串拼接 2.打印拼接 字符串按照字符切割 字符串比较 字符串长度 字符串是否包...

  • 字符串api

    字符串 增 concat() //拼接任意字符串,并返回拼接后的字符串 加号 ➕ 同上 字符串 ...

  • 批量根据id修改字段

    update tableName set 字段名 = concat(id,'拼接字符串','拼接字符串');

  • 142字符串的高效处理

    1、字符串的拼接 2、StringBuilder类(字符串构建器) 使用StringBuilder来拼接字符串: ...

  • go语言string之Buffer与Builder

    操作字符串离不开字符串的拼接,但是Go中string是只读类型,大量字符串的拼接会造成性能问题。 字符串拼接的方式...

网友评论

      本文标题:字符串拼接详解

      本文链接:https://www.haomeiwen.com/subject/qdnmgxtx.html