解决方案 »

  1.   

    使用javac -p 看看,这个问题没必要纠结了
      

  2.   

    StringBuffer和StringBuilder基本上差不多,就是线程的问题;
    String定义的是常量,即String实例化以后所有的属性都是final的,而StringBuffer和StringBuilder确不是,这就是所谓的可变与不可变;
    一个比喻:String是一个商品;
    StringBuffer/StringBuilder是生产这个商品的流水线;
    StringBuffer速度慢,但(线程)安全性高;
    StringBuilder速度快,但(线程)安全性差;
      

  3.   

    上面说的都是对的;首先Java中是不可以重载操作符,但这个 +  能用于字符串操作,也就是重载了操作符,这也是Java中唯一操作符重载的地方;其次,任何字符串的 + 操作都会转换为StringBuilder的操作;但你若这样操作:
    StringBuilder value = new StringBuilder(“result = “ + foo()); 
    value.append(arg + boo());那你又是白优化了,还是会创建3个 StringBuilder对象; 
      

  4.   

    http://bbs.csdn.net/topics/270015407
      

  5.   

    我对 +      +=  不了解,所以第一个不知道。第2个对 one String to hold the final result,我不同意。
    System.out.println(value);
    value是StringBuilder看源代码一清二楚。
      

  6.   

    上面说的都是对的;首先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"指的是哪个?
      

  7.   

    上面说的都是对的;首先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)时,就会把这个最终的结果打印出来;