RT请分析创建对象与内存分配过程,谢谢

解决方案 »

  1.   

    String s = new String("abc")创建了两个对象,首先创建了一个“abc"字符串对象,然后用它作为参数传递进s的构造方法中创建了s对象。在内存中这两个对象是不同的实例,"abc"对象由于没有外部指针指向它,它所占有 的内存最终将在某个时候被虚拟机回收Integer i = new Integer(123)只创建了1个Integer对象。
      

  2.   


    "abc"实在常量池里面创建,如果之前已经存在,不会再创建Integer i = new Integer(123) 这句话改成Integer i = 123效率会高一些
      

  3.   


    如果Integer中的数大于127那就另当别论了。
      

  4.   


    小弟还是有点。。
    此时 s对象指向的不是存放“abc”这个字符串的内存地址吗??
    怎么会是 “abc”对象没有外部引用呢?
      

  5.   


    不是这样的,这样说好了,内存中会有两个“abc”,一个被s指向,一个无外部指针。
      

  6.   

    首先,String 创建对象初始话是 他是在一个叫常量池中,就是"abc"是在常量池中,然后new String()这个对象是在堆中,然后引用s 是在 栈中,指向过程就是栈中的s 先指向 堆中的对象,然后因为这个对象是用String初始的,又指向常量池中的"abc"。不知道楼主明白否?
      

  7.   

    String s = new String("abc")创建了两个对象,首先创建了一个“abc"字符串对象,然后用它作为参数传递进s的构造方法中创建了s对象。在内存中这两个对象是不同的实例,"abc"对象由于没有外部指针指向它,它所占有 的内存最终将在某个时候被虚拟机回收Integer i = new Integer(123)只创建了1个Integer对象。
      

  8.   


     如果在仔细的想一下
    刚才这段话说了这么几个点:
    1."abc"是在常量池中。(是一个对象吧?)
    2.然后new String()这个对象是在堆中(是一个对象吧?)
    3.然后引用s 是在 栈中,指向过程就是栈中的s (是一个对象吧?)
    如果回到一开始的话。这段代码有2个对象; 这时候上面的这三个问号 肯定有一个是不算对象的。
      

  9.   

    14楼说的是错误的。用String("abc")构造的字符串对象是常量池中"abc"的一个拷贝,并不会指向原字符串,而是拥有一个独立拷贝。
      

  10.   

    String s = new String("abc") ;先回去常量池中查找是否已有"abc" ,如果没有,则创建了一个“abc"字符串对象 ,放入常量池中 ;取出常量池的"abc”,作为参数创建一个String对象,s是指向这个String对象的引用,这个对象放在堆存储空间中 ;Integer i = new Integer(123)只创建了1个Integer对象。123 是常量池中的数据,是基本类型int;
    个人理解哦
      

  11.   

    "abc"是常量池的对象
    new String是堆中对象
    s不是对象,是栈内的一个变量,只是它引用了堆中的对象另外,12L的[不是这样的,这样说好了,内存中会有两个“abc”,一个被s指向,一个无外部指针。]说法不完全正确,常量池的"abc"和堆中的对象有一定的联系,如果没有外部指针,就没法找到常量池的对象了
    String s1 = "abc";
    String s2 = new String("abc");
    System.out.println(s1==s2); //false
    String s3 = s2.intern();
    System.out.println(s1==s3); //true
    即通过intern方法,可以指向常量池中的对象
      

  12.   

    new String("abc"),这里先创建了一个匿名对象,然后String s 又创建了一个对象,是值为“abc"的另一个对象,所以前一个匿名对象是没有引用的,会被GC回收。
      

  13.   

    我觉得 他是 把常量表的入口地址,转变为 堆中String对象的直接地址。那请问 "abc"拷贝的对象放在哪里?
      

  14.   

    CSDN Java 版永不凋谢的问题!