String

hashCode
 public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {   //hash 默认值为0(此时还没有计算hash) && String中的字节数组有值(使用 String str="avc"; hash初始值为0,使用new String("avc"),构造时计算)
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];        //为什么使用31? https://www.cnblogs.com/nullllun/p/8350178.html
            }
            hash = h;
        }
        return h;
    }
toCharArray
   
public char[] toCharArray() { // Cannot use Arrays.copyOf because of class initialization order issues char result[] = new char[value.length]; System.arraycopy(value, 0, result, 0, value.length); return result; }

  System中的方法 src 原数组 srcPos 从元数据的起始位置开始 dest 目标数组 destPos 目标数组的开始起始位置 length 要copy的数组的长度
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
getChars
    public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
        if (srcBegin < 0) {
            throw new StringIndexOutOfBoundsException(srcBegin);
        }
        if (srcEnd > value.length) {
            throw new StringIndexOutOfBoundsException(srcEnd);
        }
        if (srcBegin > srcEnd) {
            throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
        }
        System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
    }

toCharArray 与 getChars 都是调用了 System.arraycopy
equals
  重写了方法,先判断==,再判断是否为String类型,再判断长度相等,再判断每一个元素
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

    2.3 length
            字节数组的大小

    2.4 isEmpty
    2.5 charAt
    2.6 codePointAt
            对应索引位置的 ascII码表(中文)或Unicode代码点(英文)

    2.7 equals
            重写了方法,想判断==,再判断是否为String类型,再判断长度相等,再判断每一个元素

    2.8 contentEquals
            参数传  StringBuffer 和 StringBuilder ,对线程不安全的加锁,所以不好用

    2.9  equalsIgnoreCase
    2.10 compareTo
            用字符串1跟字符串2作比较,如果字符串1的字典顺序在字符串2前面,则返回一个负数。若在后面,则返回一个正数。若两个字符串的字典顺序相同,则返回0。
            排序的时候使用
    2.11 compareToIgnoreCase
    2.12 regionMatches
            从当前字符串的firstStart位置开始,取一个长度为len的子串;然后从另一个字符串other的otherStart位置开始也取一个长度为len的子串,然后比较这两个子串是否相同,如果这两个子串相同则返回true,否则返回false
    2.13 startsWith(String prefix, int toffset)
            测试源字符串是否从索引toffset处开始以字符串prefix开始
    2.14 indexOf
    2.15 lastIndexOf
    2.16 substring
    2.17 concat
    2.18 replace
    2.19 matches
            该方法用来判断这个字符串是否匹配给定的正则表达式
    2.20 replaceFirst

    2.21 replaceAll
    2.22 split
    2.23 join
    2.24 toLowerCase
    2.25 toUpperCase
    2.26 trim
    2.27 toString
    2.28 valueOf
    2.29 format
            字符串格式化  https://segmentfault.com/a/1190000019350486





原文地址:https://www.cnblogs.com/draymond/p/12885341.html