Java中String类的concat方法

在了解concat()以前,首先须要明确的是String的两点特殊性。java

  • 长度不可变
  • 值不可变 
    这两点从源码中对String的声明能够体现:
private final char[] value ;
  • 1

其中final对应值的不可更改的特性;而char[]对应String是长度不可更改的特性。数组

所以,当咱们对String进行拼接后,产生的应该是一个新的字符串。 
对于这一点,咱们能够对concat()进行源码的解读得出一样的结论。markdown

@param str 须要拼接到原字符串的新串 @param otherlen 新串的长度 @param len 原字符串的长度 @param buf 存放最终字符串的字符数组(长度为len+otherlen) @method copyOf(char[] original, int newLength) 复制指定的数组,截取或用 null 字符填充(若有必要),以使副本具备指定的长度。 @method getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符今后字符串复制到目标字符数组。 public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } int len = value.length; char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }

源码分析:

concat()方法首先获取拼接字符串的长度,判断这个字符串长度是否为0(判断这个用来拼接的字符串是否是空串),若是是就返回原来的字符串(等于没有拼接);不然就获取源字符串的长度,建立一个新的char[]字符数组,这个字符数组的长度是拼接字符串的长度与源字符串的长度之和,经过Arrays类的copyOf方法复制源数组,而后经过getChars方法将拼接字符串拼接到源字符串中,而后将新串返回。
  • 1

API中也对这个方法进行了解释:源码分析

  • 若是参数字符串的长度为 0,则返回此 String 对象。
  • 不然,建立一个新的 String对象,用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列链接而成的字符序列。

综上,当对String对象进行拼接时,会建立一个新的字符串来存储新串。this

相关文章
相关标签/搜索