Java中由substring方法引发的内存泄漏(3)

        return ((beginIndex == 0) && (endIndex == value.length)) ? this 

                : new String(value, beginIndex, subLen); 

    } 

public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } if (endIndex > value.length) { throw new StringIndexOutOfBoundsException(endIndex); } int subLen = endIndex - beginIndex; if (subLen < 0) { throw new StringIndexOutOfBoundsException(subLen); } return ((beginIndex == 0) && (endIndex == value.length)) ? this : new String(value, beginIndex, subLen); }

 

public String(char value[], int offset, int count) { 

        if (offset < 0) { 

            throw new StringIndexOutOfBoundsException(offset); 

        } 

        if (count < 0) { 

            throw new StringIndexOutOfBoundsException(count); 

        } 

        // Note: offset or count might be near -1>>>1.  

        if (offset > value.length - count) { 

            throw new StringIndexOutOfBoundsException(offset + count); 

        } 

        this.value = Arrays.copyOfRange(value, offset, offset+count); 

    } 

public String(char value[], int offset, int count) { if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } if (count < 0) { throw new StringIndexOutOfBoundsException(count); } // Note: offset or count might be near -1>>>1. if (offset > value.length - count) { throw new StringIndexOutOfBoundsException(offset + count); } this.value = Arrays.copyOfRange(value, offset, offset+count); }

Arrays类的copyOfRange方法:

public static char[] copyOfRange(char[] original, int from, int to) { 

        int newLength = to - from; 

        if (newLength < 0

            throw new IllegalArgumentException(from + " > " + to); 

        char[] copy = new char[newLength];   //是创建了一个新的char数组  

        System.arraycopy(original, from, copy, 0

                         Math.min(original.length - from, newLength)); 

        return copy; 

    } 

public static char[] copyOfRange(char[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); char[] copy = new char[newLength]; //是创建了一个新的char数组 System.arraycopy(original, from, copy, 0, Math.min(original.length - from, newLength)); return copy; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/17adb84fa6fd743ac7ca88313bca4367.html