提示:以下是本篇文章正文内容,下面案例可供参考
查完资料总结一下,关于String、StringBuffer、StringBuilder的区别,可以从多个角度来看。
一、是否可变
String:String内部的value值是final修饰的,因此不可变。每次修改String的值,并没有真正改变原来的值,而是产生了一个新的对象。
StringBuffer:可变,字符串的变更不会产生新的对象。
StringBuilder:可变,字符串的变更不会产生新的对象。
二、是否线程安全
String:因为String不可变,所以它是线程安全的。
StringBuffer:StringBuffer的每个操作方法都加了synchronized,因此是线程安全的。
StringBuilder:StringBuilder不是线程安全的。
三、性能
String:由于String不可变,在做字符串拼接和修改操作时需要创建新的对象和分配内存,因此String性能最低。
StringBuffer:StringBuffer的字符串可以直接被修改,所以StringBuffer的性能高于String。
StringBuilder:StringBuilder比StringBuffer的性能高,因为StringBuffer加了同步锁。
四、存储
String:String存储在字符串常量池中。
StringBuffer:存储在堆内存空间。
StringBuilder:存储在堆内存空间。
其他
StringBuffer:JDK1.0声明。
StringBuilder:JDK5.0声明。
三者在jdk8及之前底层都使用char[],在jdk9及之后都使用byte[]。
总结
要频繁对字符串进行增、删、改等操作时,建议使用StringBuffer或StringBuilder,因为String效率太低。
当不涉及到线程安全问题,建议使用StringBuilder。因为使用StringBuilder效率高。