当前位置:天才代写 > tutorial > JAVA 教程 > Java:String结构器中originalValue.lengthsize产生的环境

Java:String结构器中originalValue.lengthsize产生的环境

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:1018

最近在看Jdk6中String的源码的时候发明String的有个这样的结构要领,源代码内容如下:

public String(String original) {
    int size = original.count;
    char[] originalValue = original.value;
    char[] v;
    if (originalValue.length > size) {
            int off = original.offset;
            v = Arrays.copyOfRange(originalValue, off, off+size);
    } else {
        v = originalValue;
    }
    this.offset = 0;
    this.count = size;
    this.value = v;
    }

这时就对originalValue.length > size这个不解啊。故网上搜寻原因。发此刻stackoverflow上有人提到这个问题。尚有个海内的文章也说了这个问题。

1 http://stackoverflow.com/questions/12907986/how-could-originalvalue-length-size-happen-in-the-string-constructor

2  http://www.kankanews.com/ICkengine/archives/99041.shtml

看了上面的两篇文章的说明,我彻底的大白了。本来是这样啊。来看看jdk6中String的subString要领。

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    if (endIndex > count) {
        throw new StringIndexOutOfBoundsException(endIndex);
    }
    if (beginIndex > endIndex) {
        throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
    }
    return ((beginIndex == 0) && (endIndex == count)) ? this :
        new String(offset + beginIndex, endIndex - beginIndex, value);
    }
// Package private constructor which shares value array for speed.
    String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
    }

看看上面的源码,发明利用substring要领后新的String工具的字符数组照旧本来工具的字符数组。这样就呈现了originalValue.length > size这个问题。如

String s1="hello world";
String s2=s1.substring(6);
String s3=new String(s2);

阐明上面的代码 s2的属性char[] value任然是本来s1的属性char[] value={‘h’,’e’,’l’,’l’,’o’,’ ‘,’w’,’o’,’r’,’l’,’d’}。s2的属性offset为6,count为5.在new String(s2)时originalValue.length=11>count=5。故我们可知在这样的环境下会呈现本文接头的问题。

From:cnblogs 天魂地煞

 

    关键字:

天才代写-代写联系方式