Java重拾系列(二)小记 Java String StringBuilder StringBuffer
2017-04-02 10:27
519 查看
这个问题无论是面试还是日常知识点最普通和最基础的知识点,但往往细节才是我们需要注重掌握的。可以这么说,如果不是经历面试,我可能很久都不会特意去了解这三者的联系,做个自我总结反思一下,其实我们面试考察的知识点又何尝不是我们编码过程中常会遇到的各种问题么,切不可抱着面试的心态看待这些问题。在工作学习的过程中,不能对问题有所逃避。
以下内容出自于官方 API Documents 或 SF。
StringBuilder 兼容 StringBuffer ,拥有 StringBuffer 所有操作方法
在单线程场景下用于替代 StringBuffer
应该优先使用 StringBuilder ,因为大部分实现来说它比 StringBuffer 更快
StringBuilder 主要的操作方法是
StringBuilder 的
StringBuilder 的同一个对象在进行不同操作时,都是同一个实例
每个 StringBuilder 都有一个容器,可以为其定长,只要字符串长度都不超过限制,它就不会分配新的内部缓冲区。如果超长溢出了,会自动生成一个更长的缓冲区
StringBuilder 的实例在多线程环境中是非线程安全的。如果需要使用的话,需要加上同步锁
值得注意的是,给 StringBuilder 传递一个 null 参数会导致 NullPointerException 异常
其余特点和 StringBuilder 所述基本一致
源码实现中,StringBuffer 线程安全的原因之一是加了 synchronized 同步锁,但是两者都各自继承了抽象的AbstractStringBuilder 或 AbstractBuffer
在使用
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
以下内容出自于官方 API Documents 或 SF。
StringBuilder
StringBuilder 出自 JDK5StringBuilder 兼容 StringBuffer ,拥有 StringBuffer 所有操作方法
在单线程场景下用于替代 StringBuffer
应该优先使用 StringBuilder ,因为大部分实现来说它比 StringBuffer 更快
StringBuilder 主要的操作方法是
append()和
insert()方法
StringBuilder 的
append()方法总是将数据添加到末端,插入操作可将数据添加到指定的位置
StringBuilder 的同一个对象在进行不同操作时,都是同一个实例
每个 StringBuilder 都有一个容器,可以为其定长,只要字符串长度都不超过限制,它就不会分配新的内部缓冲区。如果超长溢出了,会自动生成一个更长的缓冲区
StringBuilder 的实例在多线程环境中是非线程安全的。如果需要使用的话,需要加上同步锁
值得注意的是,给 StringBuilder 传递一个 null 参数会导致 NullPointerException 异常
StringBuffer
线程安全其余特点和 StringBuilder 所述基本一致
源码实现中,StringBuffer 线程安全的原因之一是加了 synchronized 同步锁,但是两者都各自继承了抽象的AbstractStringBuilder 或 AbstractBuffer
String
String 是一个常量,只在创建后就无法改变,StringBuffer 支持可改变的字符串,因为 String 对象是不可变的,可以被共享在使用
String a = b + c + d;时,由于性能原因,Java 编译器默认会将其转换为
String a = new StringBuilder(b).append(c).append(d).toString();
String a = "a" + "b" + "c";实际已经在创建的时候就定义为
String a = "abc";
例1 :
String str = "abc"; // is equivalent to: char data[] = {'a', 'b', 'c'}; String str = new String(data);
例2 :String的更多用法:
System.out.println("abc"); String cde = "cde"; System.out.println("abc" + cde); String c = "abc".substring(2,3); String d = cde.substring(1, 2);
参考文档
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.htmlhttp://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
相关文章推荐
- JAVA笔记系列:字符串操作——string stringbuilder stringbuffer
- 黑马程序员_Java学习日记_JAVA中API中对象String和StringBuffer/StringBuilder
- JAVA String StringBuffer Stringbuilder
- JDK源代码学习系列03----StringBuffer+StringBuilder
- java 常见问题(1)-String/StringBuffer/StringBuilder
- Java中String/StringBuffer/StringBuilder区别
- Java中String StringBuffer StringBuilder比较
- Java String StringBuilder StringBuffer
- JAVA : String StringBuilder String Buffer
- Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder
- Java基础 String StringBuffer StringBuilder
- Java核心类库——String StringBuffer StringBuilder
- 黑马程序员—Java基础学习笔记之String&&StringBuffer&&StringBuilder
- Java编程-String StringBuffer StringBuilder三者比较
- java.lang.StringBuffer与java.lang.StringBuilder的作用?区别是什么?
- Java String\StringBuffer\Stringbuilder
- JDK源码学习系列03----StringBuffer+StringBuilder
- java中String与StringBuilder/StringBuffer
- Java String StringBuilder StringBuffer
- 黑马程序员——java-几个常用的类(Object,Scanner,String,StringBuffer/StringBuilder)