String、StringBuilder和StringBuffer
2019-04-17 14:00
120 查看
一、认识String
被final修饰,不可被继承;
底层实现原理是通过char数组来保存字符串的;
对String对象的任何操作(如concat、replace等)都不会改变原对象,而是生成新的String对象(分析源代码可以发现,这些操作最后都是通过new String返回了一个新的对象);
如:
[code]public String concat(String str) { int otherLen = str.length(); if (otherLen == 0) { return this; } int len = value.length; char buf[] = Arrays.copyOf(value, len + otherLen); str.getChars(buf, len); return new String(buf, true); }
二、有了String,为何还需要StringBuffer和StringBuilder?
目的在于减少资源的使用。下面我们以字符串拼接为例来简单看一下。
demo1:
[code]/** * 会产生100个String对象 */ public class StringLoopMain1 { public static void main(String[] args) { String s = ""; for(int i=0;i<100;i++){ s += "hello"; } } }
对应的字节码分析结果如下:
demo2:
[code]/** * 产生一个对象,append操作都是基于原对象操作的 单线程环境使用 */ public class StringLoopMain2 { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); for(int i=0;i<100;i++){ sb.append("hello"); } } }
对应的字节码分析结果如下:
demo3:
[code]/** * 产生一个对象,append操作都是基于原对象操作的 同StringBuilder的区别:线程安全,每个方法都加了synchronized关键字。 多线程环境使用 */ public class StringLoopMain3 { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); for(int i=0;i<100;i++){ sb.append("hello"); } } }
对应的字节码分析结果如下:
相关文章推荐
- Java:String、StringBuffer和StringBuilder的区别
- String,StringBuffer与StringBuilder的区别
- String,StringBuffer与StringBuilder的区别
- Java的字符类String、StringBuffer与StringBuilder异同对比分析
- Java__String,StringBuffer与StringBuilder的区别??
- 正确使用String、StringBuffer、StringBuilder
- String, StringBuffer, StringBuilder 三个类比较
- 探秘Java中String、StringBuilder以及StringBuffer
- String,StringBuffer,StringBuilder的区别
- String、StringBuffer、StringBuilder区别
- 谈论 String-StringBuilder-StringBuffer 的区别
- 黑马程序员-String-StringBuffer-StringBuilder
- String,StringBuffer与StringBuilder的区别??
- String、StringBuffer和StringBuilder
- String、StringBuffer、StringBuilder 的区别
- String,StringBuffer和StringBuilder的区别
- String,StringBuffer,StringBuilder的区别
- Java 的字符串,String、StringBuffer、StringBuilder 有什么区别
- Java基础:探秘Java中的String、StringBuilder以及StringBuffer
- String 丨StringBuffer 丨 StringBuilder 使用说明