Java:String、StringBuffer和StringBuilder的用法
2013-11-18 16:30
417 查看
1 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。
2 不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:
当出现上面的情况时,显然我们要采用第二种方法,因为第一种方法,每次循环都会创建一个String result用于保存结果,除此之外二者基本相同(对于jdk1.5及之后版本)。
3 为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它们的容量。当然,如果你操作的字符串长度(length)不超过 16 个字符就不用了,当不指定容量(capacity)时默认构造一个容量为16的对象。不指定容量会显著降低性能。
4 StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。
5 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非确定系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder;否则还是用StringBuffer。
2 不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:
public void getPintSql(String rFileName, String wFileName) throws IOException { FileReader fr = new FileReader(rFileName); BufferedReader br = new BufferedReader(fr); FileOutputStream fos = new FileOutputStream(wFileName); OutputStreamWriter osw = new OutputStreamWriter(fos); String line; StringBuilder newLine = new StringBuilder(); while ((line = br.readLine()) != null) { newLine.append("sql.append(\" ").append(line).append(" \\n\");\n"); } osw.write(newLine.toString()); br.close(); fr.close(); osw.close(); fos.close(); }
当出现上面的情况时,显然我们要采用第二种方法,因为第一种方法,每次循环都会创建一个String result用于保存结果,除此之外二者基本相同(对于jdk1.5及之后版本)。
3 为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它们的容量。当然,如果你操作的字符串长度(length)不超过 16 个字符就不用了,当不指定容量(capacity)时默认构造一个容量为16的对象。不指定容量会显著降低性能。
4 StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。
5 相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非确定系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder;否则还是用StringBuffer。
相关文章推荐
- Java中的String,StringBuilder,StringBuffer三者的区别及用法策略
- Java String StringBuilder 和 StringBuffer 用法详解
- String,StringBuffer与StringBuilder的区别??(前7行说的挺好,后面就不用看了,之后直接看这篇就行了《java中StringBuilder的用法》)
- Java中String ,StringBuffer和StringBuilder的区别和用法
- JAVA基础:String, StringBuffer, StringBuilder ——区别,用法及常见问题
- Java中的String、StringBuffer以及StringBuilder的用法和区别
- Java String,StringBuilder和StringBuffer的用法和区别
- Java中的String、StringBuffer和StringBuilder的用法及区别
- Java String StringBuilder 和 StringBuffer 用法详解
- 详述 Java 语言中的 String、StringBuffer 和 StringBuilder 的区别及用法
- Java 中 String,StringBuffer 和 StringBuilder 的区别及用法
- Java—String、StringBuffer、StringBuilder的用法与区别
- Java中的String,StringBuilder,StringBuffer三者的区别
- java中的String、StringBuilder和StringBuffer的区别
- JAVA学习笔记——字符串操作(String,StringBuffer,StringBuilder)
- Java String、StringBuffer与StringBuilder的区别
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
- Java中String,StringBuffer和StringBuilder的区别
- JAVA——(1)基础补充之运算符、字符串、数组、内存分配(String,StringBuffer,StringBuilder的区别
- Java的String,StringBuffer以及StringBuilder