请问,String str = "abc";
这个语句声明了几个对象?据说是两个(一个是引用,一个是内容为"abc"的字符串)请高手解释一下

解决方案 »

  1.   

    1个对象 ,就是abc,引用不能叫对象,引用是引用,对象就是对象。
      

  2.   

    只有一个对象就是abc这个字符串在内存中的实体,str只是这个字符传的引用,通过引用改变对象的内容或者改变这个实体,就好比你是一个人,而名字只是为方便叫你而取的一样,名字不等于对象。这个解释够清楚否?
      

  3.   

    只有abc在字符串常量池中.
    String a=new String("abc");//产生两个对像,一个在字符串常量池中,一个是在常规内存中
      

  4.   

    String str = "abc";str是object variable
    "abc"是object
    object variable里存的是reference,所以也就把它叫做reference.翻译过来的说法就有点乱了..
      

  5.   

    gongyali2005(JAVA 民工)
    请问字符串常量池在哪?
    说详细点吧 这说法头一次听说...
      

  6.   

    gongyali2005(JAVA 民工)
    请问字符串常量池在哪?
    说详细点吧 这说法头一次听说...
    String s1 = "abc";
    String s2 = new String ("abc");这两个并不相等,
    第一个声明了一个对象,就在常量池中。第二个我觉得也是声明了一个,只是在内存中的“abc”看看下面这个程序
    public class Test {
    public static void main (String args[]) {
            String s1 = "abc";
            String s2 = new String ("abc");
            String s3 = "abc";
            String s4 = new String ("abc");
           
    System.out.println(s1==s2);
            System.out.println(s1==s3);
            System.out.println(s2==s4);

    }
    }结果是false
    true
    falses1 和 s3 的引用都是指向常量池中的abc
    s2 和 s4 分别指向不同的内存池,相互独立。所以 常规上,String s1= "abc" 比String s1= new String ("abc");效率要高,虽然后者看起来更符合对象的声明办法。
      

  7.   

    String s1="abc"  这是一个对象
    String s1=new String("abc")  这是两个对象
      

  8.   

    Top  
     lc328(FEEL) ( ) 信誉:100    Blog  2007-04-01 23:02:16  得分: 0  
     
     
       String s1="abc"  这是一个对象
    String s1=new String("abc")  这是两个对象  
     
    ------------------------------------
    我无法想通的就是为什么String s1=new String("abc")是两个对象注意,我们讨论的并不是在之前已经有“abc”的情况下,用String s1=new String("abc")方法和String s1 = "abc";方法的区别,这个我知道。。我们仅仅讨论String s1=new String("abc")这句话有几个对象产生。根据公认的知识,String(应该说是所有对象吧)的内容(content)是存放在堆中的,而引用(ref)是放在栈里的,我最开始怀疑,总不能说存在着两部分,就说这一句定义了两个对象吧?
      

  9.   

    你理解不了 是因为你不懂JVM的堆栈机制
    不要局限于这种初级的问题 
    等你再学段时间 自然而然就懂了
      

  10.   

    String str1 = new String("abc");语句,这里"abc"本身就是字符串常量池(也就是栈,如果之前栈中有“abc”,则不创建abc了,如果没有,就在栈中创建一个“abc”)中的一个对象,而在运行时执行new String()时,将字符串常量池中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给str1持有,结论2个对象。
      

  11.   

    String s=new String("abc")是将abc的副本(也是个对象)的引用赋值给s,即s是引用。
    而String s="abc"是直接将abc的引用赋值给s!
      

  12.   

    一个对象也没有 
    它只是声明了一个引用字符串"abc"的变量str
      

  13.   

    是2个对象没错~!
    涉及到内存分析.
    String str = "abc";str 是分配在栈内存的,而"abc"是分配在数据区 !
    str是指向"abc"的引用!这么说不知道对不对? 也是新人....
      

  14.   

    这题应该去考C++去。
    管java什么事。
      

  15.   

    String str="abc";
    最多产生了一个对象 具体问题要具体分析:
    String 是一个特殊的类  
    字符串池中的内容 叫字符面量 内容不能修改
    String  用 双引号 赋值 将放入字符串池中 池中没有 就立即创建一个对象
    有 就直接拿来用 
    所以 说 要分情况 但不会产生两个对象的另外 引用 不产生对象
      

  16.   

    一个对象,就是存储字符串"abc"的变量.
      

  17.   

    String str = "abc";
    要是栈中已经存在"abc",则一个对象也不产生
    要是不存在"abc",产生一个对象
      

  18.   

    应该是一个对象吧,str只是对象abc的名字(即引用)吧。也就是说在名字str下有个对象内容是abc.