https://www.cnblogs.com/dolphin0520/p/3778589.html
(1)对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。
e.g. substring等
(2)String str1 = "hello world";和String str3 = "hello world"; 用“==”判断时是true,因为运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)。
(3)
String,StringBuilder,StringBuffer的区别对比,string相加(直接相加的例子)
形如"I"+"love"+"java"; 的字符串相加,在编译期间便被优化成了"Ilovejava"。所以此时String相加比StringBuilder,StringBuffer要快!
String,StringBuilder,StringBuffer的区别对比,string循环相加(间接相加的例子)
形如s1+s2+s3,效率要比直接相加低,因为在编译器不会对引用变量进行优化。
for(int i=0;i<10000;i++){
string += "hello";
}
【string】JVM会自动优化成以下代码重复10000次,会new10000次StringBuilder 对象
StringBuilder str = new StringBuilder(string);
str.append("hello");
str.toString();
【StringBuilder 】而直接执行append如下,只new1个StringBuilder 对象
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}
【StringBuffer】StringBuffer类的成员方法前面多了一个关键字:synchronized,线程安全了,也会慢一点点
所以用于多线程
本文深入探讨了Java中String、StringBuilder与StringBuffer的区别,解释了String不可变性原理,以及在不同场景下使用这些类的性能考量。通过具体示例,展示了在循环中构建字符串时,StringBuilder相较于String的效率优势。
1000

被折叠的 条评论
为什么被折叠?



