如题,为什么?

解决方案 »

  1.   

    前面类似讨论多次了,呵呵
    yuejing贴
      

  2.   

    问题是对象的引用是String 对象吗?
      

  3.   

    创建了一个对象,如果你用new的话就是一个对象,你用等号也是一个,如果是以下代码:
    String x = new String("abc");
    String y = new String("abc");
    那么x和y指向不同的对象。你用x==y判断为不等。
    如果如下代码:
    String x = "abc";
    String y = "abc";
    那么只创建一个对象。你用x==y判断为相等。
    因为用等号的时候,String类型的应用首先会在字符串池中找又没有相同的字符串存在,如果有的话就不会在创建新的对象了,但是用new关键字的话就是显示说在创建一个对象,java中的所谓应用很类似于C++中的指针的,就是引用存放的是一个对象的hashcode,而指针动态分配则存放一个对象的地址。你也可以通过打印对象的hashcode()方法的返回之验证我的说法。
      

  4.   

    我觉得应该说是创建了一个对象,一个是对象引用~new String("xyz")是创建了一个对象~前面的s是这个对象的引用
      

  5.   

    说的再简单点,就是有几个new就是创建几个对象~
      

  6.   

    一个对象?,太一厢情愿了吧。
        public String(String value) {
    count = value.length();
    this.value = new char[count];
    value.getChars(0, count, this.value, 0);
        }
    这是java.lang.String的源代码,你们看看就知道是不是一个对象了。虽然String对象本身并没有修改自身数据的地方,但是java的对象都可以修改自身数据,对于String也没有任何限制。许多人认为String是个很特殊的对象。java是对String的相关操作有一些特殊处理,但String也是Object,它必需满足一个Object所有特征。
      

  7.   

    应该是两个吧,new的在堆上,另一个在栈上
      

  8.   

    虚心学习,从上面分析来看,对于String对象来说,应该是只创建了一个了!我只发表我个人理解!其它的什么对象的引用,都不能称为对象!
      

  9.   

    "xyz"本身就是一个String的对象 
    所以String s = new String("xyz");
    是调用了String类的拷贝构造函数effective java 里面详细的说明了这个问题
      

  10.   

    两个对象一个在堆里面,一个在静态区里面!
    String abc = new String("abc");
    String bcd = new String("abc");
    如果是这样就是创建三个并不是四个!因为第一个创建了两个对象,在第二个对象创建的时候
    先回去静态区找,找到了需要的就在堆里创建一个对象,然后把引用指导静态区!
      

  11.   

    字符串是个特例
    用String str = "abc"
    就是在栈中的