JDKソース学習(1)-string

2801 ワード

  • Stringクラスの基本状況
  • Stringのクラスの修飾子は次のとおりです.
    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence{
        ...
        }

    Stringはfinalに修飾され,Stringクラスは継承できないことが決定される.
    2.Stringクラスの属性:
        private final char value[];
    valueはfinalを使用して修飾されるため、Stringオブジェクトの作成後の値は変更されません.
    すべてのプロパティはprivateタイプであり、setメソッドは実装されていないため、Stringのプロパティは変更できません.
    private int hashprivate static final long serialVersionUID = -6849794470754667710L;
    private static final ObjectStreamField[] serialPersistentFields =
            new ObjectStreamField[0];

    3.コンストラクタ
    ここでは、以下のような特殊なものをいくつか説明します.
    1)符号化フォーマットがあり、初期化値はbytes[]である.次のように
        
     public String(byte bytes[], int offset, int length, Charset charset) {
        ...
        }

    ここでcharsetはStringタイプの符号化値とすることができる.
    4.isEmptyはStringの判定方法
    public boolean isEmpty() {
            return value.length == 0;
        }

    valueが0であるか否かを判断するboolean値を直接返します.
    5.codePointAt Stringのある位置の文字を返すasciiコードの10進数値
     public int codePointAt(int index) {
            if ((index < 0) || (index >= value.length)) {
                throw new StringIndexOutOfBoundsException(index);
            }
            return Character.codePointAtImpl(value, index, value.length);
        }

    Character.codePointAtImplメソッドのソースコードは
    static int codePointAtImpl(char[] a, int index, int limit) {
            char c1 = a[index];
            if (isHighSurrogate(c1) && ++index < limit) {
                char c2 = a[index];
                if (isLowSurrogate(c2)) {
                    return toCodePoint(c1, c2);
                }
            }
            return c1;
        }

    java.lang.Character.isHighSurrogate(char ch)は、与えられたchar値がUnicode高エージェントエントリコードユニットであると判断する.アドバンスドプロキシアイテムコードユニットとも呼ばれます).
    この値は文字そのものではなく、UTF-16で符号化された補足の文字の表現に用いられる.
    java.lang.Character.isLowSurrogate(char ch)は、与えられたchar値がUnicode低エージェントコードユニット(末尾エージェントコードユニットとも呼ばれる)であるかどうかを決定する.
    これらの値は、自身の文字を表すものではないが、補完文字を表すUTF-16符号化に用いられる.
    6.equals
    このメソッドはObjectクラスのメソッド書き換えであり,コードは以下の通りである.
     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;
        }