首页 > 编程知识 正文

java字符串拼接的几种方式,字符串拼接是什么意思

时间:2023-05-06 20:46:49 阅读:183917 作者:4258

1、使用 + 完成拼接字符串常量 String str1 = "hello";String str2 = "world";String str3 = "hello" + "world";

反编译以后的代码,

String str1 = "hello";String str2 = "world";String str3 = (new StringBuilder()).append("hello").append("world").toString();

可以看出,原来字符串常量在拼接过程中,JVM会优化成创建StringBuilder的匿名对象,使用其append方法拼接l

也就是说,Java中的 + 对字符串常量的拼接,其实现原理是使用StringBuilder.append来提高效率。

2、StringBuffer和StringBuilder的append()

StringBuilder类封装了一个字符数组:private char value[];
与String不同的是,它并不是final的,所以他是可以修改的。另外,与String不同,字符数组中不一定所有位置都已经被使用,它有一个实例变量,==int count;==表示数组中已经使用的字符个数

append源码如下:

public StringBuilder append(String str) { super.append(str); return this;}

查看其父类AbstractStringBuilder

public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this;}

append会直接拷贝字符到内部的字符数组中,如果字符数组长度不够,就进行扩容。
StringBuffer和StringBuilder最大的区别在于是线程安全问题。StringBuffer用synchronized修饰保证线程安全,相对效率会差一点。

public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this;} 3、concat() 方法 String str1 = "hello";String str2 = "world";String str3 = str1.cancat("world").

注意:这个方法只能用于拼接字符串,不能拼接其他类型的数据)将指定的字符串拼接到该字符串的末尾。并且字符串本身和拼接的字符串都不能为null,否则运行程序后会报空指针异常NullPointerException。

小结:

字符串拼接过程中会创建新的对象,如果要在一个循环体中进行字符串拼接,就要考虑效率问题。使用StringBuilder的方式是效率最高的,但是存在线程安全问题。如果不是在循环体中进行字符串拼接的话,用 + 就可以。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。