String a = "abc";
进行此操作时,是用String类里面的哪个构造器。下面是java api String类的一个构造器
public String(String original) {
int size = original.count;  //这里original.count值是从哪里来的 是不是在传参的时候调用了一些初始化
char[] originalValue = original.value;
char[] v;
   if (originalValue.length > size) {     v = new char[size];
      System.arraycopy(originalValue, original.offset, v, 0, size);
  } else {
      
    v = originalValue;
  }
this.offset = 0;
this.count = size;
this.value = v;
    }

解决方案 »

  1.   

    是先构造一个临时String object 之后附值构造到a上
      

  2.   

    String是一个比较奇怪的类型,不是基本类型却可以直接赋值,是编译期搞定的,因此不用构造方法了。
      

  3.   

    String是一个比较特殊的类型~
    String a = "abc"; 
    没有使用构造器,先在栈上查看是否有abc这个字面常量,没有则在栈上创建一个这样的字面常量,然后把a这个引用指向到这个常量上.整个过程并没有在堆上创建对象,所以根本没用构造器.
      

  4.   


    public String() {
    this.offset = 0;
    this.count = 0;
    this.value = new char[0];
    }
    String类里面的几个常量在编译期确定,他们的值是编译器来做的?此时构造器还没调用吧。比如说String a = "abc";
    然后调用String.count就能得到字符个数,
      

  5.   


    String a = "abc",在堆中也创建了对象吧。
    String a = new String("abc");创建了两个对象,如果没有在堆中创建,那为何有2个对象呢?
      

  6.   

    String a = "abc"是在字符串池中创建了对象
    楼上的String a = new String("abc");
    “abc”应该是在字符串池中创建了对象
     又在堆中创建了对象
    String是在程序编译的时候就看是否有String然后在字符串池中创建相应的对象的
      

  7.   

    /**
         * Initializes a newly created <code>String</code> object so that it
         * represents an empty character sequence.  Note that use of this 
         * constructor is unnecessary since Strings are immutable. 
         */
    原码里面说的
      

  8.   

    String s = new String("abc")要debug到java源码,该怎么个弄法?
      

  9.   

     //这里original.count值是从哪里来的 是不是在传参的时候调用了一些初始化
    参数是String original,original.count当然是参数String的信息了。
    你这个例子中不会调用这个构造方法。
      

  10.   


    String a = "abc";创建对象时,是不是调用了某个构造器了,所以在调用public String(String original)参数String就有了count属性了?
      

  11.   

    public String(String original这不是临时的嘛 original,楼主啊,仔细点啊,楼主加油