String字符串性能优化的几种方案(12)

1.“+”直接拼接的是常量变量 , 如\"ab\"+\"cd\"+\"ef\"+\"123\" , 内部编译就把几个连接成一个常量字符串处理;

2. “+”拼接的含变量字符串 , 如案例2:\"ok\" + s + \"xyz\" + 5 , 内部编译其实是new 一个StringBuilder来进行来通过append进行拼接;

3.案例3循环过程 , 实质也是“+”拼接含变量字符串 , 因此 , 内部编译时 , 也会创建StringBuilder来进行拼接 。

对比三种情况 , 发现第三种情况每次做循环 , 都会新创建一个StringBuilder对象 , 这会增加系统的内存 , 反过来就会降低系统性能 。

因此 , 在做字符串拼接时 , 单线程环境下 , 可以显性使用StringBuilder来进行拼接 , 避免每循环一次就new一个StringBuilder对象;在多线程环境下 , 可以使用线程安全的StringBuffer , 但涉及到锁竞争 , StringBuffer性能会比StringBuilder差一点 。

这样 , 起到在字符串拼接时的优化效果 。

2.如何使用String.intern节省内存?

推荐阅读