56-58_数组_StringBuilder和StringBuffer_常用方法_方法链的实现_JDK源码分析_常见面试题

StringBuilder与StringBuffer

  • StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。
  • StringBuffer可变字符串,线程安全,但效率低,不推荐使用。
  • String 是不可变字符串,根据实时情况使用,在循环当中不要使用,因为会产生好的没用的字符串。

StringBuffer和StringBuilder的方法完全一样。

String,StringBuilder要学会查看api的良好习惯,通过api学会使用常见的方法,自己利用案例来理解每个方法的具体含义。这样你会更深刻理解每个方法的使用。

StringBuilder与StringBuffer常用方法

构造函数:

StringBuilder()
public StringBuilder() {
        super(16);//初始化默认为16字符
}
//super:AbstractStringBuilder
AbstractStringBuilder(int capacity) {
        value = new char[capacity];
}
StringBuilder(int size)
public StringBuilder(int capacity) {
        super(capacity);
}
StringBuilder(String str)
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;
}
 public StringBuilder append(String str) {
        super.append(str);
        return this;
}
public StringBuilder(String str) {
        super(str.length() + 16);
        append(str);
}
StringBuilder(CharSequence chars)
public StringBuilder(CharSequence seq) {
        this(seq.length() + 16);
        append(seq);
}
public AbstractStringBuilder append(CharSequence s) {
        if (s == null)
            return appendNull();
        if (s instanceof String)
            return this.append((String)s);
        if (s instanceof AbstractStringBuilder)
            return this.append((AbstractStringBuilder)s);

        return this.append(s, 0, s.length());
}

(1)、length()和capacity()

一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。

(2)、ensureCapacity()

设置缓冲区的大小:
void ensureCapacity(int capacity)

(3)、setLength()

设置缓冲区的长度
void setLength(int len)

(4)、charAt()和setCharAt()

同String

(5)、getChars()

同String

(6)、append()

可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。

int a=42;
StringBuffer sb=new StringBuffer(40);
String s=sb.append("a=").append(a).append("!").toString();

(7)、insert()

插入字符串

  • StringBuffer insert(int index,String str)
  • StringBuffer insert(int index,char ch)
  • StringBuffer insert(int index,Object obj)

index指定将字符串插入到StringBuffer对象中的位置的下标。

(8)、reverse()

颠倒StringBuffer对象中的字符

(9)、delete()和deleteCharAt()

删除字符

  • StringBuffer delete(int startIndex,int endIndex)
  • StringBuffer deleteCharAt(int loc)

(10)、replace()

替换

  • StringBuffer replace(int startIndex,int endIndex,String str)

(11)、substring()

截取子串 

  • String substring(int startIndex)
  • String substring(int startIndex,int endIndex)
public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("abcdefghijklmnopqrstuvwxyz");
        sb.append(true).append("ABC");// append(参数)添加方法,返回值是this
        System.out.println(sb);
        sb.delete(3, 5);// 删除方法是[start end)这样的一个规律。
        System.out.println(sb);
        sb.replace(3, 5, "Hello");// 替换方法是从start 开始 end结束之间插入字符串。
        System.out.println(sb);
        System.out.println(sb.length());// 还有一些一看就明白的方法自己尝试一下。
    }
}

面试题的回答

StringBuilder 与StringBuffer的区别,StringBuilder与String的区别。

  1. StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。
  2. String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final char value[] 等方法的原因。
  3. 如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符穿做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值