`

探讨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()。

 

分享到:
评论

相关推荐

    Java String StringBuilder StringBuffer

    在Android/Java开发中,用来处理字符串常用的类有3种: String、StringBuilder、StringBuffer。  它们的异同点:  1) 都是 final 类, 都不允许被继承;  2) String 长度是不可变的, StringBuffer、...

    JAVA面试资料大全-整理.zip

    9、 String、StringBuffer、StringBuilder 的区别 10、 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 .............................................. ...............................................

    java面试宝典

    24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的原理机制? 10 28、char 型变量中能不能...

    java8源码-putaoo.github.io:putao.github.io

    (String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?、什么是反射机制?反射机制的应用场景有哪些?......) (Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别、HashMap的底层...

    java笔试题

    19、String和StringBuilder、StringBuffer的区别? 20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 21、描述一下JVM加载class文件的原理机制? 22、char 型变量中能不能存贮...

    java8源码-java-start::seedling::seedling::seedling:学习Java语法过程中的一些案例

    (String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?、什么是反射机制?反射机制的应用场景有哪些?......) (Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别、HashMap的底层...

    AIC的Java课程1-6章

     能够使用String,StringBuffer,StringBuilder类创建字符串对象和使用其方法,分辨不同类之间的区别。  能够使用Date, Calendar, Locale, DateFormat,NumberFormat类创建、改变和显示日期、数字和货币...

    2018秋招java笔试题-javapass:java深入学习资料集锦

    (String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?、什么是反射机制?反射机制的应用场景有哪些?......) (Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别、HashMap的底层...

    千方百计笔试题大全

    24、String, StringBuffer StringBuilder 的区别。 10 25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 10 27、描述一下JVM 加载class 文件的原理机制? 10 28、char 型变量中能不能...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】java中String、StringBuffer、StringBuilder的区别 21 【基础】运行时异常和非运行时异常 参见 21 运行时异常 21 非运行时异常 22 【基础】java引用类型 23 强引用(StrongReference) 23 软引用...

Global site tag (gtag.js) - Google Analytics