-
String,StringBuilder和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。String类提供的是数值不可改变的字符串,而这个StringBuilder和StringBuffer类提供的字符串可进行修改。也就是说String类每次赋值时都会重新分配一个内存地址,而StringBuilder和StringBuffer类在new一次后,每次重新赋值都不会开辟新的内存地址。当你知道字符数据要改变的时候你就可以使用StringBuilder或StringBuffer,这样可以节省空间。
-
String实现了equals方法,而StringBuilder和StringBuffer没有实现equals方法
public static void main(String[] args) { StringBuilder sb = new StringBuilder("asd"); StringBuilder sb1 = new StringBuilder("asd"); boolean equals = sb.equals(sb1); System.out.println(equals); //结果为false String a1 = "asd"; String a2 = "asd"; boolean equals1 = a1.equals(a2); System.out.println(equals1); //true StringBuffer b1 = new StringBuffer("asd"); StringBuffer b2 = new StringBuffer("asd"); boolean equals2 = b1.equals(b2); System.out.println(equals2); //结果为false }
-
在执行速度上,String < StringBuffer < Stringbuilder
-
String < StringBuffer
这是因为String类是不可变的,即字符串常量,所以每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。这就会对程序运行产生很大的影响,因为每次改变时都会分配新的内存,当内存中的无引用对象多了之后,GC(垃圾收集)进程在垃圾回收时会消耗时间,因此经常改变内容的字符串最好不要用 String类的对象。如果是使用 StringBuffer 类,每次都是对 StringBuffer 对象本身进行操作,就不会产生新的对象。所以在一般情况下推荐使用StringBuffer ,特别是字符串对象经常改变的情况下。
-
StringBuffer < StringBuilder
涉及线程安全问题,由StringBuffer < StringBuilder我想读者就可以看出哪个是线程安全,哪个是线程不安全的。StringBuffer 是线程安全的,所以执行速度要比线程非安全的StringBuilder要慢
-
String,StringBuilder和StringBuffer的区别
最新推荐文章于 2024-09-14 18:46:05 发布