![](https://csdnimg.cn/release/download_crawler_static/86296229/bg6.jpg)
上面的方法使用了更新的特性,也更加安全。它们主要实现了byte字节数组向字符串的转换,支持自定义字符集
(通过字符集名称或Charset对象表征)、长度、偏移量等,提供了基本但完备的异常处理机制。
这两个方法支持通过StringBuffer和StringBuilder对象创建String对象。值得注意的是,StringBuffer中设置了
synchronized关键字,这表示最多只有一个进程可以访问对应缓冲区,体现了StringBuffer作为内存缓冲区的特
性。
这个方法为StringBuffer的toString方法提供加速。当share为true时,构造函数将会使用StringBuffer寄存器
toStringCache里的值,而非value里的值。这将加速转换的过程。
以上就是String类的全部构造方法。可以看出,它们已经涵盖了基本需求。
在构造方法之间,还有这样一个方法:
该方法用于在字节数组中进行边界检查。
接下来,代码描述了一些对String对象基本信息的获取方法(由于篇幅限制,部分方法体不得不加以省略):
基本属性方法
public String(StringBuffer buffer) {
synchronized(buffer) {
this.value = Arrays.copyOf(buffer.getValue(), buffer.length());
}
}
public String(StringBuilder builder) {
this.value = Arrays.copyOf(builder.getValue(), builder.length());
}
String(char[] value, boolean share) {
// assert share : "unshared not supported";
this.value = value;
}
private static void checkBounds(byte[] bytes, int offset, int length) {
if (length < 0)
throw new StringIndexOutOfBoundsException(length);
if (offset < 0)
throw new StringIndexOutOfBoundsException(offset);
if (offset > bytes.length - length)
throw new StringIndexOutOfBoundsException(offset + length);
}
public int length() {
return value.length;
}
public boolean isEmpty() {
return value.length == 0;
}
public char charAt(int index) {