对比 | 内容 | 拼接字符串 | 安全性 | 效率 | 使用情况 |
String | 不可变 | String c=”a”+”b”; |
| 最低 | 操作的数据量比较小 |
StringBuffer | 可变 | StringBuffer s=new StringBuffer(); s.append(“a”).append(“b”); | 安全 | 低 | 在多线程下操作大量数据 |
StringBuilder | 可变 | 不安全 | 高 | 在单线程下操作大量数据 |
String s="hello"与String s=new String("hello")的区别
Java运行环境有一个字符串池,由String类维护。执行语句String s="hello"时,首先查看字符串池中是否存在字符串"hello",如果存在则直接将"hello"赋给s,如果不存在则先在字符串池中新建一个字符串"hello",然后再将其赋给s。
执行语句String s=new String("hello")时,不管字符串池中是否存在字符串"hello",直接新建一个字符串"hello"(注意:新建的字符串"hello"不是在字符串池中),然后将其赋给s。
前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。