String、StringBuffer、StringBuilder的比较
2016-07-12 14:02
411 查看
在Java中对字符串的处理主要使用String、StringBuffer和StringBuilder这三个类。下面我们就来学习和比较一下这三个字符串处理类。
-String
String类型的对象是不可变的对象,所有对String类型的变量的改变都是开辟了一个新的空间,生成了一个新的String对象,然后让原来的String类型的变量指向新的String对象。
实例化String对象的方式:
1)直接赋值
2)通过new关键字创建
我们来对比一下这两种方式实例化String对象的不同:
第一种直接赋值的方式,就是开辟了一个空间,内容是“hello”,然后
str对象指向这个空间。
第二种方式实际上呢是开辟了两个空间,一个是没有对象指向的空间,内容是”Hello”,一个是有对象指向的空间,内容也是”hello”。如下图所示:
通过上述描述,很明显直接赋值实例化String对象肯定是比使用new关健字实例化String对象效率要高。多以在实际开发中更多的是以直接赋值的方式来创建字符串。
-StringBuffer
StringBuffer是可变的对象,所有对StringBuffer对象的改变都是对原StringBuffer对象的改变。
StringBuffer同时也是线程安全的,StringBuffer类的方法前面都有关键字synchronized,都是同步方法,也就是说如果有多个线程操作同一个StringBuffer对象是顺序进行的。
-StringBuilder
StringBuilder也是可变的对象,并且处理速度比StringBuffer要快。
但不是线程安全的。
总结:
大部分情况下StringBuffer的处理速度比String的处理速度要快,
当然也有特殊的情况:
这时候生成str1的速度要比生成str2的速度要快的多!
因为String str1=”Welcome”+” to”+” my”+”contry!”;
其实就是:
String str1=”Welcome to my contry!”,当然不需要多少处理时间。
StringBuilder的处理速度要比StringBuffer的处理的速度要快
但StringBuffer是线程安全的,StringBuilder不是线程安全的
所以在需要对字符串做大量改变的时候,建议使用StringBuffer或StringBuilder
在单线程下建议使用StringBuilder,在多线程下建议使用StringBuffer。
-String
String类型的对象是不可变的对象,所有对String类型的变量的改变都是开辟了一个新的空间,生成了一个新的String对象,然后让原来的String类型的变量指向新的String对象。
实例化String对象的方式:
1)直接赋值
String str="hello";
2)通过new关键字创建
String str=new String("hello");
我们来对比一下这两种方式实例化String对象的不同:
第一种直接赋值的方式,就是开辟了一个空间,内容是“hello”,然后
str对象指向这个空间。
第二种方式实际上呢是开辟了两个空间,一个是没有对象指向的空间,内容是”Hello”,一个是有对象指向的空间,内容也是”hello”。如下图所示:
通过上述描述,很明显直接赋值实例化String对象肯定是比使用new关健字实例化String对象效率要高。多以在实际开发中更多的是以直接赋值的方式来创建字符串。
-StringBuffer
StringBuffer是可变的对象,所有对StringBuffer对象的改变都是对原StringBuffer对象的改变。
StringBuffer同时也是线程安全的,StringBuffer类的方法前面都有关键字synchronized,都是同步方法,也就是说如果有多个线程操作同一个StringBuffer对象是顺序进行的。
-StringBuilder
StringBuilder也是可变的对象,并且处理速度比StringBuffer要快。
但不是线程安全的。
总结:
大部分情况下StringBuffer的处理速度比String的处理速度要快,
当然也有特殊的情况:
String str1="Welcome"+" to"+" my"+"contry!"; StringBuffer str2=new StringBuffer("Welcome").append("to").append(" my").append("contry!");
这时候生成str1的速度要比生成str2的速度要快的多!
因为String str1=”Welcome”+” to”+” my”+”contry!”;
其实就是:
String str1=”Welcome to my contry!”,当然不需要多少处理时间。
StringBuilder的处理速度要比StringBuffer的处理的速度要快
但StringBuffer是线程安全的,StringBuilder不是线程安全的
所以在需要对字符串做大量改变的时候,建议使用StringBuffer或StringBuilder
在单线程下建议使用StringBuilder,在多线程下建议使用StringBuffer。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序