一个笔试题。

解决方案 »

  1.   

    这个问题讨论不知多少遍了
    http://blog.csdn.net/luojihaidao/archive/2009/02/05/3863658.aspx
      

  2.   

    String a = "xx";
    String c = "xx" + a;
    这里到底有几个对象生成??
      

  3.   

    不要光受不了这种问题
    正因为大家有歧义才拿出来讨论
    String a = "temp";
    有人说生成两个对象。
    先在heap里创建一个,
    再在contant pool 创建一个,指向heap中的那一个。
    这样就创建了两个对象。
      

  4.   


    String a = "temp";
    只是生成了一个对象temp,而且直接放在常量池里的String a = new String("temp");
    就像你说的,生成2个对象,一个String对象,一个temp
      

  5.   

    那么
    String b = "hate";
    String a = b + "love";
    这里总共会生成几个对象????????
      

  6.   

    String str1 = "abc";
    String str2 = "abc";if(str1 == str2)
       System.out.println("Only one object");
    else
       System.out.println("Not only one object");
      

  7.   

    只要是像“String a = b + "love";”这样,在赋值表达式里带了引用的,都会在堆里生成一个新的对象
    如果只是单纯的字符串相加,就只是在常量池里生成一个对象
      

  8.   

    说的没错,以代码来表述就是:
    String str1 = "abc";
    String str2 = "a" + "bc"; //和str1是相同的对象
    String str3 = str2 + ""; //和str1是不同的对象
      

  9.   

    请楼主去看下 对象类型和值类型的数据在java中是如何存储的文章,string是个特例。
      

  10.   

    怎么就没人正面回答:
    String b = "hate"; 
    String a = b + "love"; 
    这里总共会创建几个对象?
      

  11.   


    三个,StringBuilder一个。另外有两个String
      

  12.   

    不同的jvm实现不一样的,这个问题没有标准答案!
      

  13.   

    不可能,这个问题就是Alibaba的笔试题。
      

  14.   

    创建了3个对象
    因为String使用private final char value[]来实现字符串的存储,所以用+后,会产生新的对象 
      

  15.   

    http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
    关于String,我想了解我列的内容应该够全了。
      

  16.   

     String b = "hate";
     String a = b + "love";
    总共创建3个对象,分别是常量池中的“hate”和“love”,以及堆中的“hatelove”执行过程分析:
    1.类加载时,常量池中创建了2个字符串字面常量"hate"和"love"
    2.栈中创建引用b,指向常量池中的"hate"
    3.栈中创建引用a,+运算后,堆中创建String对象"hatelove",引用a指向该对象
      

  17.   

    27楼:栈中创建引用a,+运算后,堆中创建String对象"hatelove",引用a指向该对象
    有什么证据表明这里是在堆里创建的,我还是以为在常量池里创建的。
      

  18.   

    如果反汇编以上程序的字节码,可以发现,第二句话String a = b + "love"; 的实际实现是:
    String a = new StringBuilder().append(b).append("love").toString();
    所以其实最后是通过toString()方法返回的对象
    再查看API中toString()方法的源代码
    可以得出结论,返回的是一个堆中的新的对象
      

  19.   

    3个:引用b,引用a ,一个"hatelove"
    说明,应用对象肯定是新创建的。而"hate"因为是常量,所以这里没有创建String对象而是直接从常量池拿。String a = b + "love";("love"是从常量池里取的)是变量,不能在常量池里取,所以只能new一个!
    正确否?
      

  20.   

    门牌号当然不是房子了~``
    LZ问的是生成了几个对象,而不是生成了几个String对象
    按照ZangXT的分析
    String b = "hate"; 
    String a = b + "love";
    应该是生成了一个String对象,一个StringBuilder对象吧?
    LZ的题目里没有生成对象?
      

  21.   

    我认为引用也是对象 java里万事万物皆对象
    反射便知
      

  22.   

    进入字符串常量有两种情况:
    1.字面常量,就是引号包围的字符串,比如“abc”等。
    2.自己对字符串对象调用intern操作。
    如何证明呢?
    http://blog.csdn.net/ZangXT/archive/2009/09/20/4571644.aspx