解决方案 »

  1.   

    应该是两个吧,new  String();是一个;1+2+str+3+4; 是一个。
      

  2.   

    两个string 一个引用str
    首先创建了a,和引用str,然后创建了12a34,并且把str引用指向它,a被垃圾回收.
      

  3.   

    不应该是3a34吗,1+2是整数相加等于3,再+str有一个字符串把3也转换为字符串然后组合为3a,后面遇到3,4也一样,3a3,然后是3a34
      

  4.   

    我想问一下这两个有没有不一样
            String a = "abcde";
            String b = new String("abcde");如果一样。
    那就1 一个
    2 一个
    3 一个
    4 一个。
      

  5.   

    两个不一样 a 和b 都是引用,a 指向常量池的 abcde,b 指向堆中的 abcde。
      

  6.   

    不是这个意思,
    我本来是想问一下,不是对象的东西。因为javascript中,有直接是值这说法。我想在java中,应该是先转化成对应数据类型的对象,才可以操作的吧。        String a1 = "abc";
            String a2 = new String("efg");
            a2.concat("ww");
            a1.concat("dd");
      

  7.   

    String str = new String("a"); 
    首先 new String("a")  会创建2个对象,但是他们共同引用常量池中的同一个拷贝str = 1+2+str+3+4; 
    执行时会被解析为stringbuilder append 进行追加,因此应该是三个对象.
      

  8.   

    应该是5个
    String str = new String("a"); 两个  这个大家应该知道
    str = 1+2+str+3+4; 这里有新三个   1+2+str  一个
    1+2+str+3 两个
    1+2+str+3+4 三个  字符串相加的时候是新创家对象,不像是StringBuffer或者buider是同一个对象。故这里有5个对象。
      

  9.   

    我同意这个答案。因为String是final的类没有像StringBuffer那样的动态append(),所以每一次修改其内容实质上是调用了clone()这个方法复制了一个新的对象,然后在新的对象上面进行的修改。
      

  10.   

    表示支持! 去看看String 和StringBuffer的区别吧
      

  11.   

    参考:http://my-mis.blog.sohu.com/14592137.html
      

  12.   

    http://blog.csdn.net/java2000_net/article/details/3681385
    看这个吧,不用纠结,一目了然.