您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java字符串串联:concat()与“ +”operator

Java字符串串联:concat()与“ +”operator

首先,语义上略有不同。如果a是null,则a.concat(b)抛出一个NullPointerException,但a+=b将把原来的值a就好像它是null。此外,该concat()方法仅接受String值,而+操作员会将参数无提示地转换为String(使用toString()对象的方法)。因此,该concat()方法在接受方面更加严格。

要深入了解,请写一个简单的类 a += b;

public class Concat {
    String cat(String a, String b) {
        a += b;
        return a;
    }
}

现在与一起拆卸javap -c包括在Sun JDK中)。你应该会看到一个列表,其中包括

java.lang.String cat(java.lang.String, java.lang.String);
  Code:
   0:   new     #2; //class java/lang/StringBuilder
   3:   dup
   4:   invokespecial   #3; //Method java/lang/StringBuilder."<init>":()V
   7:   aload_1
   8:   invokevirtual   #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   11:  aload_2
   12:  invokevirtual   #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   15:  invokevirtual   #5; //Method java/lang/StringBuilder.toString:()Ljava/lang/    String;
   18:  astore_1
   19:  aload_1
   20:  areturn

所以,a += b相当于

a = new StringBuilder()
    .append(a)
    .append(b)
    .toString();

concat方法应该更快。但是,使用更多的字符串StringBuilder,至少在性能方面,该方法是成功的。

Stringand的源代码StringBuilder(及其包专用基类)在Sun JDK的src.zip中可用。你会看到正在建立一个char数组(根据需要调整大小),然后在创建final时将其丢弃String。实际上,内存分配出奇的快。

java 2022/1/1 18:17:34 有525人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶