Java里的String、StringBuffer、StringBuilder有什么区别?
您的每一个用心回答,都会让这个世界变得更美好一些!
String类表示内容不可改变的字符串。
而StringBuffer类表示内容可以被修改的字符串。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
另外,String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,
而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。
StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。
String不可变,底层是char数组,加了final标识。
StringBuffer和StringBuilder可变,StringBuffer是线程安全的。
String 字符串,它是一个final类,不可以被继承。常量,内部维持着一个final的字符数组。当我们对字符串进行拼接时,其实是创建多个对象进行拼接。如果字符串内容需要经常改变,则不建议使用String,可以使用StringBuilder,或者StringBuffer
StringBuilder 是线程不安全的,效率相对于StringBuffer高,适用于单线程对多字符串的操作。内部实现也是通过字符数组。
StringBuffer 是线程安全的,效率相对于StringBuilder低,适用于多线程操作字符串,内部也是通过维护一个字符数组实现的。
那同学们可能会混淆StringBuilder和StringBuffer哪个是安全,那个是线程不安全的了。
StringBuilder-->BiuBiu...快呀!,快的话就线程不安全呀。加锁了就会慢嘛,所以知道这个是线程不安全的,那么StringBuffer是线程安全的咯。
String类表示内容不可改变的字符串。
而StringBuffer类表示内容可以被修改的字符串。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
另外,String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,
而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。
StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。
String不可变,底层是char数组,加了final标识。
StringBuffer和StringBuilder可变,StringBuffer是线程安全的。
String 字符串,它是一个final类,不可以被继承。常量,内部维持着一个final的字符数组。当我们对字符串进行拼接时,其实是创建多个对象进行拼接。如果字符串内容需要经常改变,则不建议使用String,可以使用StringBuilder,或者StringBuffer
StringBuilder 是线程不安全的,效率相对于StringBuffer高,适用于单线程对多字符串的操作。内部实现也是通过字符数组。
StringBuffer 是线程安全的,效率相对于StringBuilder低,适用于多线程操作字符串,内部也是通过维护一个字符数组实现的。
那同学们可能会混淆StringBuilder和StringBuffer哪个是安全,那个是线程不安全的了。
StringBuilder-->BiuBiu...快呀!,快的话就线程不安全呀。加锁了就会慢嘛,所以知道这个是线程不安全的,那么StringBuffer是线程安全的咯。