Java源码___StringBuffer类(二)

版权声明:如果有不同看法,或者是文中写错的地方,麻烦各位花费几秒的时间,指出文中的错误。灰常感谢!!! https://blog.csdn.net/pseudonym_/article/details/80633478

java.lang.StringBuffer类分析摘要:
<1>trimToSize( )方法
<2>setLength( int newLength )方法
<3>icharAt(int index)方法
<4>codePointAt(int index)方法

1.trimToSize( )方法
 该方法会改变该类缓存区的大小,该方法与AbstractStringBuilder类中方法实现一样,不过是多了一个同步而已。

//【重写自AbstractStringBuilder类】
@Override
public synchronized void trimToSize(){
    if(count < value.length){
        value = Arrays.copyof(value, count);
    }
}

基本属性:public公有、synchronized同步。。

 方法注意:
 该方法的使用可能会减少字符序列的存储大小,如果容量大小本身超过了存储字符所需要的容量,那么就会将该容量减少到刚好能够存储这些字符的容量。该方法主要的目的是为了提高空间效率,并且会影响后续调用的capacity()方法的返回值。

 
2.setLength((int newLength)方法
 该方法用于改变缓存字符的字符长度和字符内容,该方法与AbstractStringBuilder类中方法实现一样,不过是多了一个同步而已。

//【重写自AbstractStringBuilder类】
@Override
public synchronized void setLength(int newLength){
    toStringCache = null;
    super.setLength(newLength);
}

基本属性:public公有、synchronized。
参数:newLength
参数说明:要改变成的字符长度大小。
异常:StringIndexOutOfBoundsException
异常说明:如果传入的参数为负数的话,则会出现该异常。

该方法的源码思路是:
<1>首先将变量toStringCache设置为null。
<2>然后判断是否参入实参newLength是否为负数,如果为负数,则抛出字符串角标越界异常。
<3>再次使用ensureCapacity方法来调整缓存区大小,不够则增加,够则不增加。
<4>如果是增加字符长度,则会保留原来的字符,然后不够的用空字符补上。
<5>将count的大小调整为newLength。

 

3.charAt(int index)方法
 重写字符序列接口CharSequence的方法,用于获取特定特定位置的字符,该方法与AbstractStringBuilder类中方法实现一样,不过是多了一个同步而已。

//【重写自AbstractStringBuilder类】
@Override
public synchronized char charAt(int index){
    if((index<0) || (index>=count)){
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

基本属性:public公有、synchronized同步
参数:index
参数说明:要获取的位置,即下标。
异常:StringIndexOfBoundsException(index)
异常说明:如果传入的实参index为负数或者超过了字符的长度,则抛出此异常。
返回值:char
返回值说明:字符,指定位置对应的char字符。
返回值说明:如果String对象的长度为0则返回true,否则返回false

方法说明事项:
该方法会返回对应位置的字符,所以如果传入的字符不存在,就会抛出越界异常。
该方法实际上返回的就是value[index]的字符。

 
4. codePointAt(int index)方法
 获取对应位置的字符的Unicode解码值,该方法与AbstractStringBuilder类中方法实现一样,不过是多了一个同步而已。

//【重写自AbstractStringBuilder类】
@Override
public synchronized int codePointAt(int index){
    if((index<0) || (index>=count)){
        throw new StringIndexOutOfBoundsException(index);
    }
    return Character.codePointAtImpl(value, index, count);
}

基本属性:public公有、synchronized同步。
参数:index
参数说明:要获取的位置,即下标位置。
异常:StringIndexOfBoundsException(index)
异常说明:如果要获取的位置不存在,则抛出此异常。
返回值:int
返回值说明:返回某个字符的Unicode解码值。

该方法的主要作用是:返回字符串中下表为index的字符的Unicode的解码值。

阅读更多
换一批

没有更多推荐了,返回首页