我对 + += 不了解,所以第一个不知道。第2个对 one String to hold the final result,我不同意。 System.out.println(value); value是StringBuilder看源代码一清二楚。
上面说的都是对的;首先Java中是不可以重载操作符,但这个 + 能用于字符串操作,也就是重载了操作符,这也是Java中唯一操作符重载的地方;其次,任何字符串的 + 操作都会转换为StringBuilder的操作;但你若这样操作: StringBuilder value = new StringBuilder(“result = “ + foo()); value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象; "allocating only one StringBuilder and one String to hold the final result,"这里的"one String to hold the final result"指的是哪个?
上面说的都是对的;首先Java中是不可以重载操作符,但这个 + 能用于字符串操作,也就是重载了操作符,这也是Java中唯一操作符重载的地方;其次,任何字符串的 + 操作都会转换为StringBuilder的操作;但你若这样操作: StringBuilder value = new StringBuilder(“result = “ + foo()); value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象; "allocating only one StringBuilder and one String to hold the final result,"这里的"one String to hold the final result"指的是哪个? 这里说的是StringBuilder 的toString方法,这个方法会把StringBuilder的内容转变为String,当你调用System.out.println(value)时,就会把这个最终的结果打印出来;
String定义的是常量,即String实例化以后所有的属性都是final的,而StringBuffer和StringBuilder确不是,这就是所谓的可变与不可变;
一个比喻:String是一个商品;
StringBuffer/StringBuilder是生产这个商品的流水线;
StringBuffer速度慢,但(线程)安全性高;
StringBuilder速度快,但(线程)安全性差;
StringBuilder value = new StringBuilder(“result = “ + foo());
value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象;
System.out.println(value);
value是StringBuilder看源代码一清二楚。
StringBuilder value = new StringBuilder(“result = “ + foo());
value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象;
"allocating only one StringBuilder and one String to hold the final result,"这里的"one String to hold the final result"指的是哪个?
StringBuilder value = new StringBuilder(“result = “ + foo());
value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象;
"allocating only one StringBuilder and one String to hold the final result,"这里的"one String to hold the final result"指的是哪个?
这里说的是StringBuilder 的toString方法,这个方法会把StringBuilder的内容转变为String,当你调用System.out.println(value)时,就会把这个最终的结果打印出来;