私はこのC++
ようなことができます...
String s = "abc";
char c = s[i]; // works fine...
しかしJava
、同じことをしようとすると、エラーがスローされます。どうして?。
ではjava
、上記を達成するには、次のことを行う必要があります。
s.toCharArray();
文字列の実装はC++
Java とどう違うのですか?
違いは、C++ には演算子のオーバーロードがあり、それを使用して文字列の内容にアクセスすることです。
どちらも文字列の文字を変更できないように保存します。
書ける理由
string s = "abc";
char c = s[i];
C++ では、オブジェクトが配列ではないという事実にもかかわらず、プログラマーが配列の要素にアクセスするのと同じ方法でオブジェクトのstring
文字にアクセスできるようにするインデックス演算子 ([] 演算子など) をクラスがオーバーロードしていることです。string
string
一方、Java では、いかなる種類の演算子のオーバーロードも許可されていません (唯一の例外は、+
文字列に対してオーバーロードされる演算子です)。そのため、インデックス演算子はString
オブジェクトに対してオーバーロードされません。また、オーバーロードすることもできません。Java で文字列の文字にアクセスするには、 などのアクセサー メンバー メソッドを使用する必要がありますcharAt
。toCharArray
クラスのメソッドを呼び出すこともできます。このメソッドはString
、文字列オブジェクトの文字の配列を返し、この戻り値でインデックス演算子を使用できます。
char c = s.toCharArray()[i];
C++ では、文字列は通常、文字の配列 (または文字へのポインター) であり、NULL (\0) 文字で終了します。配列を処理する場合と同様に、インデックスを付けることによって文字列を処理することもできます。
しかし Java では、文字列は配列ではありません。Java 文字列は型のオブジェクトであるjava.lang.String
ため、索引付けによって処理することはできません。
C++ の文字列は既に文字の配列として扱われますが、Java の文字列は組み込みクラスです。文字の配列とは異なります。