对比 |
内容 |
拼接字符串 |
安全性 |
效率 |
使用情况 |
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。
前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。