探讨String、StringBuffer和StringBuilder类之间的异同
1、String对象是不可变的,但引用变量是可变的。
2、如果创建了新的String而没有给它赋值,则对程序来说它是丢失的。
3、如果将String的引用变量指向了新的对象,在旧的对象可能丢失(看没有其他引用指向)。
4、String类是最终类,意味着其所有的方法都不能被覆写。
5、当JVM发现字符串的字面值时,会将它添加到String字面值池中,比如:
1)String s="ab",则会将"abc"放入常量池中,并由s引用它。
2)String s =new String("cd"),则会创建两个对象,一个在堆内存中(并由s引用它),一个放入常量池中(没有引用指向,但占用了内存)。
6、StringBuffer:线程安全的可变的字符串序列。
7、StringBuilder:非线程安全的可变的字符串序列。
8、StringBuffer和StringBuilder的API是相同(兼容)的。
9、StringBuffer和StringBuilder都是可变的,即无需创建新对象即可改变他们的值。
10、StringBuilder用在字符串缓冲区被单个线程使用时,将StrinBuilder的实例用于多个线程是不安全的。
11、StringBuffer可用在字符串缓冲区被多个线程使用的时候,可以在必要时对相应的方法进行同步。
12、如果可能,建议优先采用StringBuilder类,因为在大多数实现中,它比StringBuffer要快。
13、由于String对象是不可变的,在对String对象进行大量的修改时,就会在字符串常量池中产生大量的被丢弃的String对象(会消耗大量内存)。
14、基于以上第13点,所以如果要经常对字符串进行大量修改,则建议使用StringBuffer或StringBuilder。
15、String类常用方法:charAt()、concat()、equalsignoreCase、length()、replace()、substring()、toLowerCase()、toUpperCase()、trim()以及toString()。
16、StringBuffer及StringBuilder常用方法:append()、delete()、insert()、reverse()及toString()。
上一篇: 生活爆笑,每天都得乐一乐
下一篇: 搞笑聊房,从哭聊到笑
推荐阅读
-
String、StringBuffer和StringBuilder类的区别
-
全面解释java中StringBuilder、StringBuffer、String类之间的关系
-
C#中String StringBuilder StringBuffer类的用法
-
String、StringBuilder和StringBuffer的区别
-
String、StringBuffer和StringBuilder的区别
-
荐 (全文4653字)String、StringBuffer和StringBuilder的六大区别
-
java String、StringBuilder和StringBuffer的区别详解
-
String类和StringBuffer类的互相转换
-
String,StringBuffer,StringBuilder之间的区别
-
String,StringBuffer,StringBuilder之间的关系