String、StringBuilder、StringBuffer的区别
2016-03-03 20:30
316 查看
效率来说,大部分情况下,String<StringBuffer<StringBuilder。String生成对象不可变,每次生成一个新的对象,再返回引用,可想而知,所以如果是字符串内容经常改变的不建议使用,有时候String a="ac"+"cd“(循环很多次)不会比StringBuffer的append方法慢。比如String a="abc";String b="def";String c=a+b的话效果就没那么好了;StringBuffer是线程安全的,效率也不错,如果是要考虑同步和效率兼得的话建议使用。StringBuilder是线程不安全的,所以速度StringBuilder的效率更高,建议用在方法里面,因为只能有单个线程能访问到,每个线程都有自己的方法栈,不需要考虑线程同步。后两者一般有append和insert等方法,或者可以用toString返回String对象。
如果不考虑多线程的问题,建议用StringBuilder然后用toString返回String对象。
ps:对于String来说,==和equals经常会认为==是比较对象的地址,而equals比较值,其实这条规则不全部适用于其他的继承于Object的类,因为String已经重写了Object的equals,使得它是比较值,所以这个规则可以自己重新定义。如果没有重写的话,Object子类的equals其实跟==是没有多大区别的。切记大部分实现都是重写了的,比如Interger这些包装也和String没很大区别。
如果不考虑多线程的问题,建议用StringBuilder然后用toString返回String对象。
ps:对于String来说,==和equals经常会认为==是比较对象的地址,而equals比较值,其实这条规则不全部适用于其他的继承于Object的类,因为String已经重写了Object的equals,使得它是比较值,所以这个规则可以自己重新定义。如果没有重写的话,Object子类的equals其实跟==是没有多大区别的。切记大部分实现都是重写了的,比如Interger这些包装也和String没很大区别。
相关文章推荐
- SPOJ QTREE - Query on a tree
- question_015-JAVA之Map的遍历方式
- String 与StringBuilder
- Class Of Marquee Scroll通用不间断滚动JS脚本
- ProcessBuilder中如何为命令行传参
- UI控件初始化问题:initWithFrame和initWithCoder、aweakFromNib的执行
- 谈谈UIView的几个layout方法-layoutSubviews、layoutIfNeeded、setNeedsLayout
- spoj 2319 BIGSEQ - Sequence
- Sphinx Building Docs in horizon
- UIView - animateWithDuration 手势动画 使用详解
- 关于IList、IQueryable、IEnumerable与Func、Expression的关系
- UGUI官方案例—下载
- VirtualBox注册虚拟机时,Cannot register the image ‘C:\Proqram FiIes\OracIe\VirtuaIBox\VBoxGuestAdditionsiso
- Leetcode: 232. Implement Queue using Stacks(JAVA)
- HSEARCH000135: Unable to guess FieldBridge for...
- GUILayout 布局
- Ant build.xml中应该只包含一个target标签
- STL_deque
- Java中break return continue 区别
- HDU 2734 Quicksum [Ad Hoc]