String,StringBuffer,StringBuilder之间的区别
2016-04-17 00:13
501 查看
分析它们之间的不同,可以从以下5方面进行:
1.从可变对象与不可变对象
首先,String类是final类型的,所以不能被继承,String对象也是不可变对象,对一个String对象进行修改,其实是新建新了一个String对象,再将值重新赋值进去的。而StringBuffer,StringBuilder对象,都是可变对象。
2.实例化方式不同
对String对象的创建可以通过构造函数,也可以通过直接赋值,如:String s=new String("cgf life")或String s="cgf life",但是对于StringBuffer,StringBuilder对象必须通过构造函数
3.同步与异步(线程安全与非线程安全)
StringBuffer的方法都用synchronized修饰过,而StringBuilder的方法并没有用synchronized修饰过,所以StringBuffer对象是线程安全的,而StringBuilder对象不是线程安全的。
4.执行效率
StringBuffer是同步的,所以会影响执行速度,它比StringBuilder要慢,如果是单线程,用StringBuilder比较好。
对String对象进行赋值,它的内部是首创建一个StringBuffer的对象,然后调用StringBuffer的append()方法进行赋值的,最后将StringBuffer利用toString()方法转化为String对象,所以StringBuffer的效率会比String要高,所以三则的执行效率为:String<StringBuffer<StringBuilder
1.从可变对象与不可变对象
首先,String类是final类型的,所以不能被继承,String对象也是不可变对象,对一个String对象进行修改,其实是新建新了一个String对象,再将值重新赋值进去的。而StringBuffer,StringBuilder对象,都是可变对象。
2.实例化方式不同
对String对象的创建可以通过构造函数,也可以通过直接赋值,如:String s=new String("cgf life")或String s="cgf life",但是对于StringBuffer,StringBuilder对象必须通过构造函数
3.同步与异步(线程安全与非线程安全)
StringBuffer的方法都用synchronized修饰过,而StringBuilder的方法并没有用synchronized修饰过,所以StringBuffer对象是线程安全的,而StringBuilder对象不是线程安全的。
4.执行效率
StringBuffer是同步的,所以会影响执行速度,它比StringBuilder要慢,如果是单线程,用StringBuilder比较好。
对String对象进行赋值,它的内部是首创建一个StringBuffer的对象,然后调用StringBuffer的append()方法进行赋值的,最后将StringBuffer利用toString()方法转化为String对象,所以StringBuffer的效率会比String要高,所以三则的执行效率为:String<StringBuffer<StringBuilder
相关文章推荐
- EasyUI体验-分页多选,选项保留,以及历史记录相结合的保留
- LeetCode 298. Binary Tree Longest Consecutive Sequence(二叉树最长连续序列)
- HDU 5667 :Sequence
- 第一次接触JS require.js模块化工具
- 第二次聊一聊JS require.js模块化工具的基础知识
- ULabel显示1.n行文字特效,特效
- iOS修改xib中大小已经固定的UI控件的frame
- 自定制UINavigationBar和navigationBarItem
- easyui,datagrid表格显示的字段内容随机
- hdu 5667 Sequence【矩阵快速幂】
- AndroidStudio编译时卡在Gradle Build Running并死机的解决方法
- hdu-4991 Ordered Subsequence(dp+树状数组)
- 修改UITextField的placeholder颜色
- Assurance 4000 Techniques for Industrial Control Systems (ICS)
- Ubiquitous Religions(sdut_2428)
- requirejs 学习
- getRequestURL、getRequestURI、getContextPath、getServletPath和getRealPath的区别
- UI更新方法Handler和runOnUiThread
- UIImage imageName方法扩充提醒功能
- hdu 5667Sequence