StringBuffer和StringBuilder存在的作用是什么
2016-03-06 19:12
295 查看
Java的字符串String对象,有一个特性就是不变性,它只能被创建,而不能改变其中的值。因此,一些大量使用字符串的程序可能会出现性能瓶颈,甚至内存溢出。针对这样的问题,Java为开发者提供了相应的解决方案。 public class StringBBTest{ public static void main(String args []){ String a="a"; String b="b"; String c="c"; String d="d"; String abcd=a+b+c+d; } } 以上代码中,一共创建了7个String对象。对于a、b、c、d变量,它们都是通过双引号的形式来创建的String对象。而abcd变量则是通过它们4者相连得到,在相连的过程中,首先执行a+b的操作,产生了ab字符串,然后再加上c,又产生了abc字符串,最后加上d才得到abcd的String对象。 由以上的示例可以看出,通过String直接相加来拼接字符串的效率是很低的,其中可能会产生多余的String对象,例如ab,abc。如果程序中需要拼接的字符串数量成千上万,那么JVM的负荷是相当大的,严重影响到程序的性能。其实,如果有大量的字符串需要拼接的话,应该使用StringBuffer和StringBuilder类,它们是对String的一种补充。例如,同样的功能,可以这样来写代码以提高程序性能,示例如下: public class StringBBTest{ public static void main(String args []){ String a="a"; String b="b"; String c="c"; String d="d"; StringBuffer sb=new StringBuffer(); sb.append(a); sb.append(b); sb.append(c); sb.append(d); String abcd=sb.toString(); System.out.println(abcd); } } 上例是通过StringBuffer来拼接字符串的,它无法保证线程的安全。如果在拼接字符串的过程中可能会涉及到线程安全的问题,则应该使用StringBuilder,它们两者的功能和API是类似的。 在Java程序中,如果有大量拼接字符串的话,应该使用StringBuffer和StringBuilder类,它们可以避免不必要的String对象的 产生,以提高程序的性能。它们两者的作用类似,只不过StringBuilder线程是安全的。
相关文章推荐
- blade and soul pvp guide
- blade and soul races guide
- UI设计 - iOS
- UI设计 - Web
- UI设计 - PPT
- STL与泛型编程<三>:deque
- UIActivityIndicatorView头文件学习
- IOS-UIDynamic
- iOS手势之UISwipeGestureRecognizer的正确用法
- POJ 2785 4 Values whose Sum is 0
- 关于UITableView中cell的重用问题
- UITextField实现PlaceHolder
- Unexpected Exception caught setting 'x' on class xx:Error setting expression 'xx' with value ['x',]
- UIActivity头文件学习
- swif之UITableViewCell和UITableView常见属性复习
- POJ 3061 Subsequence【尺取法】
- 错误svn: The repository at 'svn://xxxxx' has uuid 'XXXX', but the WC has 'XXXX'“
- Qt中ui文件的使用
- SharePoint 2010 - Hardware and Software Requirements
- Binary Expression and Value Expression