您的位置:首页 > 编程语言 > Java开发

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

2017-06-09 21:00 841 查看

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的区别。

StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。

String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final char value[] 等方法的原因。

如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符穿做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐