1.运行速度,或者说是执行速度,(前提是要对字符串进行change操作):在这方面运行速度快慢为:StringBuilder > StringBuffer > String(因为String被修改时还需创建个新的对象,将旧的回收)
2.介绍这三者:
1)这三个只有String是字符串常量,被创建后不能被修改,其余两个都是 变量,能被修改(String类是不可变类,指向的内存地址的内容不可以改变,但指针指向可变)
2)StringBuffer是线程安全的(因为它的类方法中加入了Synchronized关键字)
3. 总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
**注意:
1)String是final类,不能被继承,内部是靠char数组来保存值的
2)对String对象的任何改变都不影响到原对象,相关的任何change操作 都会生成新的对象
关于String的难点:String str="hello world"和String str1=new String("hello world")的区别:(也就是说str不等于str1)
String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了 字面常量和符号引用,运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)。通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。
总所周知,通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。