乐趣区

关于java:java字符串拼接方式和区别

1、拼接形式

常见拼接形式有以下四种:
(1)应用符号‘+’拼接
(2)String 类中的 concat 办法拼接
(3) 应用 StringBuffer 拼接
(4) 应用 StringBuilder 拼接
(5)StringUtils.join

2、应用抉择

  • 如果只是简略的字符串拼接,不是在循环体中进行字符串拼接的话,间接应用 + 就好了
  • 如果是在 for 循环中进行字符串拼接,思考应用 StringBuilder 和 StringBuffer
  • 如果在并发场景中进行字符串拼接的话,要应用 StringBuffer 来代替 StringBuilder
  • 如果是通过一个 List 进行字符串拼接,则思考应用 StringUtils.join 和 StringJoiner

3、详情区别

3.1‘+’拼接

原理:
应用 + 拼接字符串,其实只是 Java 提供的一个语法糖,其实现原理是 StringBuilder.append

// 应用符号‘+’拼接字符串
String hollis = wechat + "," + introduce;
// 下面代码的反编译后果
String hollis = (new StringBuilder()).append(wechat).append(",").append(introduce).toString();

从反编译后的代码,应用 + 拼接字符串每次都是 new 了一个 StringBuilder,而后再把 String 转成 StringBuilder,再进行 append。
留神:
如果在 for 循环中应用 + 拼接字符串,会频繁的 new 一个对象,不仅仅会消耗工夫,还会造成内存资源的节约。
依据阿里巴巴 Java 开发手册倡议:循环体内,字符串的连贯形式,应用 StringBuilder 的 append 办法进行扩大,而不要应用 +。

3.2 String 类中的 concat 办法

用法:

String hollis = "wechat".concat(",").concat("introduce");

原理:

  • concat 办法首先创立了一个字符数组,长度是已有字符串和待拼接字符串的长度之和,再把两个字符串的值复制到新的字符数组中,并应用这个字符数组创立一个新的 String 对象并返回。
  • 通过 concat 办法,其实是 new 了一个新的 String,这也就响应到后面咱们说的字符串的不变性问题上了。
3.3 StringBuffer 和 StringBuilder

原理:

  • StringBuffer 和 StringBuilder 都继承了 AbstractStringBuilder 类,在 AbstractStringBuilder 类中定义了一个字符数组 char[] value,与 String 类中不同的是,它没有 final 修饰符,所以是能够被批改的

区别:

StringBuffer 和 StringBuilder 最大的区别就是 StringBuffer 是线程平安的,StringBuffer 应用 synchronized 进行申明,重写了 AbstractStringBuilder 类中的局部办法,这也导致了 StringBuffer 工夫效率没有 StringBuilder 高

3.4 StringUtils.join

原理:

StringUtils.join 是通过 StringBuffer 实现的,其最次要的性能是 将数组或汇合以某拼接符拼接到一起造成新的字符串。

3.5 StringJoiner

原理:

StringJoiner 是 java.util 包中的一个类,用于结构一个由分隔符分隔的字符序列(可选),并且能够从提供的前缀开始并以提供的后缀结尾。其实现原理也是依赖的 StringBuilder 类

退出移动版