String使用举例
String str = new String("welcome to ");
str += "here";
- 它的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffer toSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣。
- 并且由于String 对象是不可变对象,每次操作String都会重新建立新的对象来保存新的值。这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的。
String str = new String("welcome to ");
- String a="abc",这行代码被执行的时候,Java虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String 类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
- 在Java虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们 不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
- String str = new String("welcome to "),如果字符串池没有“welcome to”,则创建了两个对象;如果有字符串池有“welcome to”则创建一个对象。
StringBuffer使用举例
StringBuffer sb = new StringBuffer();
sb.append("hello");
- 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null。向StringBuffer中赋值的时候可以通过它的append方法。字符串连接操作中StringBuffer的效率要比String高。StringBuilder和StringBuffer基本一样。
总结
- 对于字符串连接操作较少的建议使用String
- 对于字符串连接操作较频繁,并且是多线程操作,使用StringBuffer
- 对于字符串连接操作比较频繁,但是是单线程操作的,建议使用StringBuilde
参考:
https://blog.csdn.net/ITdevil/article/details/76218622