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会产生多余的字符串,占用内存空间。
相关文章推荐
- java学习之旅57、58--数组_StringBuilder和StringBuffer的使用_JDK源码分析内部机制、常用方法补充_常见面试题答法
- java学习之旅56--数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析
- 54-55_数组_String类的常用方法_JDK源码分析_内存分析
- JDK源码分析之String、StringBuilder和StringBuffer
- 数组第二十四课,模拟ArrayList容器的底层实现,JDK源码分析
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- 容器第三课,JDK源码分析,自己实现ArrayList数组扩容
- jdk类库源码分析-StringBuffer、StringBuilder
- 【JDK源码分析】StringBuffer与StringBuilder
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- 参照JDK源码实现一个LinkedList,分析常用的List集合及其适用场景
- 数组第二十三课,StringBuilder和StringBuffer的使用,常用方法
- 59_数组_模拟ArrayList容器的底层实现_JDK源码分析ArrayList
- 数组求和的快速方法(利用cuda的共享内存)--第一部分之源码分析
- onvif规范的实现:onvif开发常用调试方法 和常见的segmentation fault错误
- java关于StringBuffer与StringBuilder的常用方法
- Java Collections Framework之Deque(LinkedList实现)源码分析(基于JDK1.6)(已补充)
- 查看jdk常用源码方法
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- Java Collections Framework之Queue(LinkedList实现)源码分析(基于JDK1.6)