前言
笔者因为遇到这样的面试题答的不够全面,经过谷歌后在这里和大家说下,还会跟大家聊一下其应用的场景(笔者不怎么喜欢背书式地将教科书上的内容拿出来讲,除非真的很必要)
String
String 对象一旦被创建,它就不能被修改,其对象会被存储在String 常量池中。String 对象不能同时地被两个线程使用。
StringBuffer
StringBuffer是可修改的,意味着StringBuffer 声明的对象的值是可变的。而StringBuffer 创建的对象都会别存放在堆(heap)中,StringBuffer 和StringBuilder 有着相同的方法,但在StringBuffer的方法中,如果其方法是同步的,那么StringBuffer线程安全。
由于它不允许两个线程同时访问同一个方法,每个方法都只能由一个线程访问一次。但是线程安全也会带来缺点,那就是性能会大大折扣。因此当调用每个类的方法相同时,StringBuilder 的速度要快于StringBuffer.(这个在面试中常被问到)。
如果StringBuffer 要转换为String 可以用toString()方法。
StringBuilder
StringBuilder 和StringBuffer 差不多相同,它们都继承于AbstactStringBuilder,StringBuilder同样是将新建的对象存放于堆中,也同样能被修改.主要的区别是StringBulider线程不安全,但它的速度快。
尾语
如果上诉有误的话,欢迎提出