文章标题:String,StringBuilder,StringBuffer
2017-10-25 21:02
211 查看
三者在执行速度方面的比较:StringBuilder > StringBuffer > String
当然这个是相对的,不一定在所有情况下都是这样。
比如String str=”hello”+”world”的效率就比 StringBuilder st=new StringBuilder().append(“hello”).append(“world”)要高
关于String:
String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
String类其实是通过char数组来保存字符串的
String是“字符创常量”,也就是不可改变的对象,因此String类的方法实现都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。
在这里要永远记住一点:
“对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”
一个小例子:
String str1 = “hello world”;
String str2 = new String(“hello world”);
String str3 = “hello world”;
String str4 = new String(“hello world”);
在这里(str1==str3) but (str2!=str4)
这是因为通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
关于StringBuffer与StringBuilder
StringBuilder类是在JDK5.0中引入的,这个类的前身是Stringbuffer,StingBuffer其效率稍有些低,但允许采用多线程的方式执行
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
添加或删除字符的操作。
对于三者使用的总结:
如果要操作少量的数据用 String
单线程操作字符串缓冲区 下操作大量数据 用StringBuilder
多线程操作字符串缓冲区 下操作大量数据 用StringBuffer
当然这个是相对的,不一定在所有情况下都是这样。
比如String str=”hello”+”world”的效率就比 StringBuilder st=new StringBuilder().append(“hello”).append(“world”)要高
关于String:
String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。
String类其实是通过char数组来保存字符串的
String是“字符创常量”,也就是不可改变的对象,因此String类的方法实现都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。
在这里要永远记住一点:
“对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”
一个小例子:
String str1 = “hello world”;
String str2 = new String(“hello world”);
String str3 = “hello world”;
String str4 = new String(“hello world”);
在这里(str1==str3) but (str2!=str4)
这是因为通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
关于StringBuffer与StringBuilder
StringBuilder类是在JDK5.0中引入的,这个类的前身是Stringbuffer,StingBuffer其效率稍有些低,但允许采用多线程的方式执行
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
添加或删除字符的操作。
对于三者使用的总结:
如果要操作少量的数据用 String
单线程操作字符串缓冲区 下操作大量数据 用StringBuilder
多线程操作字符串缓冲区 下操作大量数据 用StringBuffer
相关文章推荐
- String、StringBuffer与StringBuilder的区别
- String、StringBuffer以及StringBuilder的区别
- StringBuffer和StringBuilder和String的区别
- String、StringBuffer与StringBuilder的区别
- String、StringBuilder、StringBuffer
- String与StringBuffer与StringBuilder的区别
- String,StringBuffer,StringBuilder区别
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
- Java中的String,StringBuilder,StringBuffer三者的区别
- Java中String、StringBuffer、StringBuilder的区别详解
- String,StringBuffer与StringBuilder的区别??
- String、StringBuffer与StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- String、StringBuffer、StringBuilder
- String,StringBuffer与StringBuilder的区别??
- 关于String ,StringBuffer,StringBuilder的比较
- Java你所不知道的细节——String、StringBuffer、StringBuilder(1)
- String, StringBuffer和StringBuilder
- 【黑马程序员】String,StringBuffer和StringBuilder的区别
- String,StringBuffer与StringBuilder的区别??