分析它们之间的不同,可以从以下5方面进行:
1.从可变对象与不可变对象
首先,String类是final类型的,所以不能被继承,String对象也是不可变对象,对一个String对象进行修改,其实是新建新了一个String对象,再将值重新赋值进去的。而StringBuffer,StringBuilder对象,都是可变对象。
2.实例化方式不同
对String对象的创建可以通过构造函数,也可以通过直接赋值,如:String s=new String("cgf life")或String s="cgf life",但是对于StringBuffer,StringBuilder对象必须通过构造函数
3.同步与异步(线程安全与非线程安全)
StringBuffer的方法都用synchronized修饰过,而StringBuilder的方法并没有用synchronized修饰过,所以StringBuffer对象是线程安全的,而StringBuilder对象不是线程安全的。
4.执行效率
StringBuffer是同步的,所以会影响执行速度,它比StringBuilder要慢,如果是单线程,用StringBuilder比较好。
对String对象进行赋值,它的内部是首创建一个StringBuffer的对象,然后调用StringBuffer的append()方法进行赋值的,最后将StringBuffer利用toString()方法转化为String对象,所以StringBuffer的效率会比String要高,所以三则的执行效率为:String<StringBuffer<StringBuilder