做了一段时间的开发,但是对于String,StringBuffer和StringBuilder三者还是有诸多的疑问。现在稍微梳理一下:
1、String,StingBuffer,StringBuilder是字符串变量还是常量?
- String ----> 字符串常量
- StringBuffer ----> 字符串变量(线程安全的)
- StringBuilder ----> 字符串变量(非线程安全的)
String是字符串常量,对于这个叫法大家都可能有一个疑问,String字符串不是变量吗?怎么叫常量?
我看首先看一下官方的解释:
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared
官方解释说:String 是一个常量,他的值在创建之后不能改变,字符串缓冲区支持修改,因为字符串对象是不可变的,所以支持共享。
举个例子:
String s = "abc";
s = s + 1;
System.out.println(s);
2、String,StingBuffer,StringBuilder效率如何呢?
从高到底的顺序依次是:StringBuilder > StingBuffer > String
有上知道了String是字符串常量,所以他的效率自然而然是最低的。对于StringBuffer和StringBuilder它们属于变量,是可以改变的对象,每次对字符串的操作,实际上实在一个对象上操作,所以效率更高一些。StringBuffer是线程安全的,考虑到安全问题,相对他的性能会更低一点。由此知道了从效率的角度看,StringBuilder最高,其次是StringBuffer,最后是String字符串常量。
总结:
当多个线程使用字符串缓冲区时,使用StringBuffer保证正确的操作,如果是单线程的,建议使用StringBuiler效率更高一些。
当入行不深,只是自我总结一下,望路过大神多多指教,谢谢!