String s = "123"+"456"+"789";创建了几个对象?

解决方案 »

  1.   

    据说是一个。Think In Java 中说 String s = "123"+"456"+"789"; 在编译时会被自动的转成
    String s = "123456789"; 而这个字符串只在“String 池”中保留一个
      

  2.   

    如果问这条语句创建了几个String对象的话,的确是0个。当然,提出这种面试题的人希望的答案可能是1.
      

  3.   

    那么String s = new String("123")创建几个对象
      

  4.   

    String s = new String("123")面试的书上面说是两个  估计引用算是一个
      

  5.   

    用javap后,看了下,虚拟机创建了一个对象 String 123456789
      

  6.   

    创建1个STRING,s是一个引用对象
      

  7.   


    2个   String s = "123"+"456"+"789";创建了几个对象?
    1个吧
      

  8.   

    问一下,这个在常量区创建一个对象“123”后,没有变量引用他,是不是这个对象又被处理掉了?
    然后String s="123",又重新创建对象?
      

  9.   

    String s = "123"+"456"+"789";
    "123"+"456"时会传两个对象到String类中,然后会有一个临时对像保存"123456"
    然后"123456"+"789"同样在产生3个对象,一个临时对象赋值给s
    一共7个对象
      

  10.   

    0个。
    String s = new String("");才是真正的创建一个字符串对象。
    String s = "123"+"456"+"789";只是声明了一个变量。
    但是这道题的问题是:创建了几个对象
      

  11.   

    [Quote=引用 25 楼 qray0511 的回复:]引用 10 楼 herosongkai 的回复:
    那么String s = new String("123")创建几个对象
    2个   String s = "123"+"456"+"789";创建了几个对象?
    1个吧
    是这样吧
      

  12.   

    应该是创建一个对象。
    因为你只是声明了一个String对象s。
      

  13.   

    确实是一个,刚刚看到,放在String池了
      

  14.   

    题目出的不好,创建的"对象"有可能会有好几个,比如String中的
    private final char value[];
    private static final ObjectStreamField[] serialPersistentFields =
            new ObjectStreamField[0];
    public static final Comparator<String> CASE_INSENSITIVE_ORDER
                                             = new CaseInsensitiveComparator();但是就String本身而言,"123"+"456"+"789"会直接编译成"123456789"
      

  15.   

    4 个,java中每出现一个常量字符串都会建一个对象,加上最后生成的共四个
      

  16.   

    第一、常量表达式会在编译器被优化,所以不会存在123 456 789三个常量,只有123456789一个常量
    第二、是1个对象还是0个对象被创建,要看string池中是不是已经存在123456789,有的话就是只创建了一个变量引用,没有的话,就是先创建这个对象,然后创建一个引用。
    所以,说是0是1都有可能。
      

  17.   

    String s = new String("123");
    这个是创建了两个对象,一个引用变量
    分别是String池中的"123", new String() 放在堆中的一个Object,还有一个就是s的引用变量,放在栈中。
      

  18.   


    public class Test{
        public static void main(String [] args){
            String s = "123"+"456"+"789";//创建了几个对象?
        }
    }就这个具体类说明。
    "123"  "456"  "789"这三个String常量,都是对象。从这里"123".equals("xxx");可以看出"123"是对象。
    常量池中没有他们,他们会被存放到常量池中。
    s只是一个对象的引用,不是对象本身。他存放在栈中。
    String是不可变字符串,在执行 + 运算的时候会新生成一个对象,并不是在原对象上追加。
    “123”+“456”会新生成一个“123456”对象,常量池中没有他,同样它也会被存放到常量池中。
    然后“123456”+“789”又会生成一个“123456789”对象,一样存放到池中。
    所以一共应该有5个对象:"123" "456" "789" "123456" "123456789"。
    以上是个人意见,应该是没错的。但是如果错了请不要骂我。
      

  19.   

    2个,s是一个,它指向了new String("123")
    new String("123")是一个
      

  20.   

    很明确的告诉你一个对象都没有创建。
    简单的说,没有看到new就没有创建实例对象。。s是一个引用对象over
      

  21.   

    // Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3) 
    // Source File Name:   Hello.java
    public class Hello
    {    public Hello()
        {
        }    public static void main(String args[])
        {
            String s = "123456789";
        }
    }
    这个是用JAD凡编译后的结果,可以看出,确实是创建了1个对象
      

  22.   

    放到池中也是对象啊。"123"虽然放在池中而不是堆中,但是也是对象的!两个String执行  + 运算是会产生一个新String对象的。
    仍然坚持5个对象。
      

  23.   

    上面已经有人提到过:
    String s=new String("123");
    就是产生了两个对象。一个“123”在池中,另外一个就算new出来的那个在堆中。
    字符串并不一定要自己显示的new才会产生对象。"123".equalse("xxx");这说明"123"是可以调用String类的方法的,可以现出“123”是对象。
      

  24.   


    自己明明什么都不明白还瞎搅和,je上面就有专门一篇讲String和常量池的,自己去搜了看看去,别这误导别人。
      

  25.   

    一个或者一个都没,有兴趣看看java的堆 栈等相关内容吧。
    “123” 和new String("123");
    区别是,如果字符串缓冲池中已经有"123" 第一种方法会直接将引用指向"123",并不创建新的对象。
    而new String("123")是明确从堆中新建一个String对象,堆中的new 程序员并不能操作,
    即使你让它=null 也只是讲引用指像空,原来的new String("123")还在堆中。
    堆中的对象只能通过jvm的垃圾回收器来自动回收。
      

  26.   

    看这个帖子吧,有点启发:
    http://topic.csdn.net/u/20100610/16/df1002e4-3dd3-4190-9629-efed820687a1.html?51466
      

  27.   

    1个对象,这关于缓冲池的问题
    反编译后String s = "123"+"456"+"789"; =》String s = "123456789";
    坛子里有有一僵尸帖做过详细介绍
      

  28.   

    String s = "123"+"456"+"789";创建了几个对象?1个对象,这个对象是S