String StringBuffer StringBuilder原理

本文详细解析StringBuffer和StringBuilder在拼接字符串时如何通过不断复制数组对象来节省内存,避免频繁创建新对象导致的性能损耗。重点讨论它们的内部实现逻辑和线程安全性,并提供自定义StringBuilder的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer 和StringBuilder 节省内存的原理,在于拼接字符串的时候本身的对象不变,一直在变的是数组对象,通过不断的复制生成新的数组对象,达到拼接字符串,而StringBuffer和StringBuilder的代码逻辑一模一样,只是StringBuffer所有的方法都加了cynchronized,所以是线程安全的,可以自己写一个StringBuilder





/**
 * 
 */
package com.test.string;


import java.util.Arrays;


/**
 * @author Administrator
 *
 */
public class MyStringBUffer 
{

/**
* 数组对象
*/
private char[] value;

/**
* 长度
*/
private int count;

public MyStringBUffer ()
{
value = new char[16];
}
    
public MyStringBUffer(String str)
{
value = new char[str.length()+ 16];
append(str);
}

public MyStringBUffer append(String str)
{
if (null == str) str="null";
int len = str.length();
int newCount = len+count;

//加上原来的长度,复制新的字节数组,
value = Arrays.copyOf(value, newCount);

   //把拼接的字符串加到后面
str.getChars(0,len, value, count);
count = newCount;
return this;
}

/* 
* 重写toString
*/
public String toString()
{
return  new String(value,0,count);
}

public char[] getValue() {
return value;
}


public void setValue(char[] value) {
this.value = value;
}


public int getCount() {
return count;
}


public void setCount(int count) {
this.count = count;
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值