String 是个final class不可变字符串,拼接性能低,频繁操作,性能影响 StringBuffer 解决大量字符串拼接,线程安全 StringBuilder 在StringBuffer基础上加个线程不安全,效率最高,优先考虑 线程安全: StringBuffer:线程安全 StringBuilder:线程不安全 速度: 一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。 使用环境: 操作少量的数据使用 String。 单线程操作大量数据使用 StringBuilder。 多线程操作大量数据使用 StringBuffer。 问题:为何String设计成不可变 1.String 不可变,所以用到字符串常量池,String s1 = 'abc'; 和 String s2 = 'abc'; 指向同一个常量池,效率更高 2.多线程安全 3.String的hashCode被缓存起来,用于HashMap这种计算hashCode的速度更快 问题:为何StringBuilder不安全 相对StringBuffer,StringBuilder没有在方法上使用 …
Continue reading →