s
文字列変数を char[]a
配列に変換し、a[i]
代わりに.charAt() を使用してアクセスするよりも遅いのs.charAt(i)
でしょうか?
文字列内の各文字に多くの演算子がある問題に取り組んでいるとしましょう。
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;
}
最初にコピーする必要があるためです。
charAt() コメントのソース コードを見れば 、答えがわかります。
もうオンリーワンから戻ってきたchar array
ので、改めて比べようがない。
private final char value[];
指定されたインデックスの char 値を返します。インデックスの範囲は 0 から length() - 1 までです。シーケンスの最初の char 値はインデックス 0 にあり、次はインデックス 1 にあり、配列のインデックス付けと同様に続きます。インデックスで指定された char 値がサロゲートの場合、サロゲート値が返されます。
実際、String
クラスはその内容を として保持しているため、すでにそれを行っていchar[]
ます。
public char charAt(int index) {
if ((index < 0) || (index >= count)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index + offset];
}
wherevalue
はchar[]
文字列を保持するoffset
ものであり、1 つが別の文字列のサブ文字列である場合のように、2 つ以上の文字列が同じ文字配列を共有できるようにするものです。