关于String类中的无参构造方法:
实例1.public String() {
this.value = "".value;
}
此方法为初始化String类中 private final char value[];中的value值,由测试方法:
实例1测试方法:public static void main(String []args){
String o =new String();
o="aaa";
}
可知 首先通过实例1中的value值赋给o因此,此时o=" ",构造方法完毕之后再由“aaa”赋值给o,可以理解为o首次赋值为" "然后“aaa”赋值给o变量
实例1.2 public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
实例1.2当初始化一个String类时Steing类里面默认value为E:\\java\\jre\\bin\\instrument.dll 然后通过Array.copyOf把数组赋值给新数组 copy(这个新数组可以点进arrays.copyOf方法进入查看实现
实例1.3 public String(char value[], int offset, int count) {
if (offset < 0) {
throw new StringIndexOutOfBoundsException(offset);
}
/*************/
this.value = Arrays.copyOfRange(value, offset, offset+count);
}
此实例经过测试返回一个新的char[]下标从offset到count长度。
实例1.4 public String(int[] codePoints, int offset, int count) {
/*****/
this.value = v;
}
实例1.4接收一个int类型数组,其最后会转换成char类型的数组,原理与实例1.3相同不做过多的记录。
实例1.5 public String(byte ascii[], int hibyte, int offset, int count) {
checkBounds(ascii, offset, count);
char value[] = new char[count];
/*******
}
实例1.5其中hibyte==0则返回value[]值为从右往左数截取count数组,并返回以上方法如果使用在进使用编译器进行编译的时候回提示此方法已经过时
实例1.6 public String(byte ascii[], int hibyte) { this(ascii, hibyte, 0, ascii.length); } 此方法调用实例1.5不做过多说明
实例1.7public String(byte bytes[], int offset, int length, String charsetName) throws UnsupportedEncodingException { if (charsetName == null) throw new NullPointerException("charsetName"); checkBounds(bytes, offset, length); this.value = StringCoding.decode(charsetName, bytes, offset, length); }
根据所传递的字符编码,charsetName转换成为一个新的数组
实例1.8
public String(StringBuffer buffer) { synchronized(buffer) { this.value = Arrays.copyOf(buffer.getValue(), buffer.length()); } }
实例1.8方法表示获取buffer值赋值给value对象,这里为什么要用到sychronized个人认为是为了共享同一个value出现结果与预期结果不符的原因
实例1.9
public String(StringBuilder builder) { this.value = Arrays.copyOf(builder.getValue(), builder.length()); }
此方法与1.8实例相同,区别在于synchronized关键字的使用,使用stringbuilder相对于快一些
实例1.9
String(char[] value, boolean share) { // assert share : "unshared not supported"; this.value = value; }
实例1.9可以看出吧一个char[]数组直接复制给value,share这个参数不理解,感觉没什么用处至于为什么要加上个参数应该是为了跟另一个构造方法不重复,毕竟重载最明显的特征就是参数不一致,如果理解这个方法的话需要根据实例1.2对照看一下就能明白了。