Advertisement

Java-String字符串相加及拼接

阅读量:

Java-String字符串相加及拼接

我的博客园: https://www.cnblogs.com/djhzzl/p/14374716.html

字符串相加

复制代码
    String test1 = "test1" ;
    String test2 = test1 + "test2" + "test3" ;
    System.out.println(test2); //输出test1test2test3

在IDEA中使用+运算符(即" +"),允许实现两个字符串的连接操作。这与示例代码类似,在此过程中系统会自动合并这两部分字符串。然而需要注意的是String对象具有固定长度属性(即不可变长度),因此为了实现这种连接操作就需要创建一个StringBuilder对象来处理字符串连接。


在cmd中使用javap -v 文件名.class 对字节码文件加载运行。

在这里插入图片描述
在这里插入图片描述
复制代码
    Code:
      stack=2, locals=3, args_size=1
         0: ldc           #2                  // String test1
         2: astore_1
         3: new           #3                  // class java/lang/StringBuilder
         6: dup
         7: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
        10: aload_1
        11: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        14: ldc           #6                  // String test2test3
        16: invokevirtual #5                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        19: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
        22: astore_2
        23: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
        26: aload_2
        27: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        30: return

在第三行中,在创建了一个StringBuilder对象后,并调用了append()方法以实现字符串拼接功能;随后又调用了toString()方法将拼接结果转换为字符串形式。


效率较低

经观察可知,在频繁地运用加号运算符时(即不断地调用+操作),会导致显著的资源消耗。具体而言,在每一次这样的操作中(即每一次+符号的应用),都需要先创建多个StringBuilder实例(即先生成多个StringBuilder对象),并依次调用append方法(即逐一添加字符到现有对象上)。此外,在每一次操作之后还需生成一个新的String对象来接收结果(即完成一次拼接后需新建一个字符串来保存结果)。因此导致效率低下。


concat()和append()

所以为了高效拼接的内容, 可以直接采用StringBuffer.append() 或者StringBuffer.concat()的方法

复制代码
    System.out.println(test1.concat("test4")); //输出test1test4
在这里插入图片描述

由于concat() 方法必须具备两个String对象进行拼接的要求,在这种情况下运行效率非常高。此外,在使用StringBuilder.append()时无需创建新对象而直接追加原有对象,则会导致其运行效率非常高

全部评论 (0)

还没有任何评论哟~