append是list的一个函数, 专用于list, 只能将字符串添加到列表里。 ['a', 'b'].append('c') 结果是 :
['a', 'b', 'c']
+ 是用于连接字符串,如 ‘a' + 'b' 就是 ’ab‘
Java中的append( )方法其实是创建了一个新的数组,扩大了长度,将需要添加的字符串给复制到这个新的数组中。
JAVA中Stringbuffer有append( )方法:
而Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号。
跟String不同的是Stringbuffer是放一起的,String1+String2和Stringbuffer1.append("yyyy")虽然打印效果一样,但在内存中表示却不一样、
String1+String2 存在于不同的两个地址内存,Stringbuffer1.append(Stringbuffer2)放再一起。
StringBuffer是线程安全的,多用于多线程。
扩展资料
查看StringBuffer的append()方法
如图所示代码:
1、进入append方法
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null
super.append(str)
return this
}
其中toStringCache是Cleared whenever the StringBuffer is modified.
2、进入AbstractStringBuilder的append()方法
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
}
如果参数str为空返回appendNull()该方法最终返回return this.
3、进入ensureCapacityInternal()方法
private void ensureCapacityInternal(int minimumCapacity) {
// overflow-conscious code
if (minimumCapacity - value.length >0) {
value = Arrays.copyOf(value,
newCapacity(minimumCapacity))
}
}
copyOf(char[] original, int newLength)的方法查JDK帮助文档可知:复制指定的数组,复制具有指定的长度。
4、进入String的getChars()方法
public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {//0,len=5,value=[hello],count=5
if (srcBegin <0) {
throw new StringIndexOutOfBoundsException(srcBegin)
}
if (srcEnd >value.length) {
throw new StringIndexOutOfBoundsException(srcEnd)
}
if (srcBegin >srcEnd) {
throw new StringIndexOutOfBoundsException(srcEnd - srcBegin)
}
System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin)
}
5、最终调用的是System.arraycopy的方法:
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
/*src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目的地数据中的起始位置。
length - 要复制的数组元素的数量。
*/
System.arraycopy([world], 0, [hello], 5, 5)
将指定源数组中的数组从指定位置复制到目标数组的指定位置。
参考资料:百度百科-append
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)