1

s文字列変数を char[]a配列に変換し、a[i]代わりに.charAt() を使用してアクセスするよりも遅いのs.charAt(i)でしょうか?

文字列内の各文字に多くの演算子がある問題に取り組んでいるとしましょう。

4

4 に答える 4

7

String#charAt(int index)Oracle の Java 7 の実装:

public char charAt(int index) {
    if ((index < 0) || (index >= value.length)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

チェックの方が少し安全ですが、まったく同じ動作です。

実際には、char[]

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;
}

最初にコピーする必要があるためです。

于 2013-08-08T14:35:40.240 に答える
1

charAt() コメントのソース コードを見れば 、答えがわかります。

もうオンリーワンから戻ってきたchar array ので、改めて比べようがない。

  private final char value[];

指定されたインデックスの char 値を返します。インデックスの範囲は 0 から length() - 1 までです。シーケンスの最初の char 値はインデックス 0 にあり、次はインデックス 1 にあり、配列のインデックス付けと同様に続きます。インデックスで指定された char 値がサロゲートの場合、サロゲート値が返されます。

于 2013-08-08T14:36:00.783 に答える
1

実際、Stringクラスはその内容を として保持しているため、すでにそれを行っていchar[]ます。

String#charAt()が返す

public char charAt(int index) {
    if ((index < 0) || (index >= count)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index + offset];
}

wherevaluechar[]文字列を保持するoffsetものであり、1 つが別の文字列のサブ文字列である場合のように、2 つ以上の文字列が同じ文字配列を共有できるようにするものです。

于 2013-08-08T14:34:57.800 に答える