string长度不可变是指在内存中
如果你定义
String s1 = new String("s1");
String s2 = new String("s2");
时,你做操作
s1 = s1 + s2;
这时内存中会再开辟出一个长度为s1.size() + s2.size()的内存,再将两个字符串放进去。
如果你定义
String s1 = new String("s1");
String s2 = new String("s2");
时,你做操作
s1 = s1 + s2;
这时内存中会再开辟出一个长度为s1.size() + s2.size()的内存,再将两个字符串放进去。
StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是
StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因
此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程
不安全的。
StringBuffer 始于 JDK 1.0
StringBuilder 始于 JDK 1.5
从 JDK 1.5 开始,带有字符串变量的连接操作(+),JVM 内部采用的是
StringBuilder 来实现的,而之前这个操作是采用 StringBuffer 实现的。
StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因
此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程
不安全的。
StringBuffer 始于 JDK 1.0
StringBuilder 始于 JDK 1.5
从 JDK 1.5 开始,带有字符串变量的连接操作(+),JVM 内部采用的是
StringBuilder 来实现的,而之前这个操作是采用 StringBuffer 实现的。