面试题:String , StringBuffer 和StringBuilder三者的区别,以及如何实现一个字符串倒序?
答案
String 的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用 StringBuffer或者StringBuilder。StringBuffer 和 StringBuilder主要区分是在线程安全和执行速度上。StringBuffer线程安全但速度慢,StringBuilder非线程安全但速度快。
字符串倒序
字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde” 变成“edcba”
答: String src = "ABCDEF ";
String dst = new StringBuffer(src).reverse().toString();
private String reverse(String src){
return new StringBuffer(src).reverse().toString();
}
探究String和StringBuffer的区别
String 字符串(长度不可变)
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。
因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
探究StringBuffer 和 StringBuilder 类的区别
StringBuffer 字符串变量(线程安全,但执行速度慢)
StringBuilder 字符串变量(非线程安全,但执行速度快)
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
总结
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
当对字符串进行修改的时候,特别是字符串对象经常改变的情况下,需要使用 StringBuffer 和 StringBuilder 类。
StringBuffer 和 StringBuilder主要区分是在线程安全和执行速度上。StringBuffer线程安全但速度慢,StringBuilder非线程安全但速度快。