String s="abc";
String s1=new String("abc");
以上两句是调用哪种构造函数完成初始化的呢?

解决方案 »

  1.   

    String s1=new String("abc");--为初始化一个对象,新分配一块内存
    String s="abc";--若之前创建了"abc"这个变量,将共享该内存。
      

  2.   

    自己去哪个src源文件吧!再或者单步调试看看!
      

  3.   

    String s2=new String(s);
    调用String(String original)完成初始化,那 这两种类型是如何初始化的呢?
    String s="abc";
    String s1=new String("abc");其实是在查看String源代码时,搞不明白,String类的变量是如初始化的,才发觉原来连上面的问题也没明白
      

  4.   

    如何单步调试源代码呢?
    比如我想调试,String类中String(String original)构造函数时,应该如何操作呢
    public String(String original) {
    int size = original.count;
    char[] originalValue = original.value;
    char[] v;
       if (originalValue.length > size) {
          // The array representing the String is bigger than the new
          // String itself.  Perhaps this constructor is being called
          // in order to trim the baggage, so make a copy of the array.
                int off = original.offset;
                v = Arrays.copyOfRange(originalValue, off, off+size);
      } else {
          // The array representing the String is the same
          // size as the String, so no point in making a copy.
        v = originalValue;
      }
    this.offset = 0;
    this.count = size;
    this.value = v;
        }
      

  5.   

    Java文档里有,很详细,可以自己去看哈
      

  6.   

    String s="abc":
    在栈中先创建一个字符串引用s,然后在字符串常量池里找有没有abc,如果找到就将s指向这个abc(引用),如果没有就新创建一个abc并将s指向它
    String s1=new String("abc"):
    在栈中先创建一个字符串引用s,然后在堆中创建一个初始值为abc的String对象,最后将s指向这个对象
    区别就在于s和s1使用"=="操作符
    用第一种方法创建的两个abc的String对象实际指向同一个abc,所以==判断引用是否指向同一个对象结果为true
    第二种方法创建两个abc的String对象是在堆中分别开辟空间创建的两个对象,用==判断引用是否指向同一个对象结果为false
    用第一种方式创建String对象有利于节省内存空间,在一定程度上也能提高运行速度(在堆中开辟空间会加重程序负担)
      

  7.   


    你可能误解了我的意思,大概是我没有描述清楚
    原本我是想看看String中的compareTo方法是如何实现的,源码如下:public int compareTo(String anotherString) {
    int len1 = count;
    int len2 = anotherString.count;
    int n = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset; if (i == j) {
        int k = i;
        int lim = n + i;
        while (k < lim) {
    char c1 = v1[k];
    char c2 = v2[k];
    if (c1 != c2) {
        return c1 - c2;
    }
    k++;
        }
    } else {
        while (n-- != 0) {
    char c1 = v1[i++];
    char c2 = v2[j++];
    if (c1 != c2) {
        return c1 - c2;
    }
        }
    }
    return len1 - len2;
        }接着我就想搞清楚compareTo方法中使用的String类的变量初值是多少,如count,value,offset
    我开始查看构造函数是如何初始化这些变量的,结果发现完全没能搞明白,所以就有了本贴开始处提问的String s="abc";是如何初始化的
    也就是想知道用哪个构造函数,怎么给count,value,offset这些变量赋值的