14

私はこのC++ようなことができます...

String s = "abc";
char c = s[i]; // works fine...

しかしJava、同じことをしようとすると、エラーがスローされます。どうして?。

ではjava、上記を達成するには、次のことを行う必要があります。

s.toCharArray(); 

文字列の実装はC++Java とどう違うのですか?

4

6 に答える 6

3

違いは、C++ には演算子のオーバーロードがあり、それを使用して文字列の内容にアクセスすることです。

どちらも文字列の文字を変更できないように保存します。

于 2013-09-19T07:05:04.913 に答える
2

書ける理由

string s = "abc";
char c = s[i]; 

C++ では、オブジェクトが配列ではないという事実にもかかわらず、プログラマーが配列の要素にアクセスするのと同じ方法でオブジェクトのstring文字にアクセスできるようにするインデックス演算子 ([] 演算子など) をクラスがオーバーロードしていることです。stringstring

一方、Java では、いかなる種類の演算子のオーバーロードも許可されていません (唯一の例外は、+文字列に対してオーバーロードされる演算子です)。そのため、インデックス演算子はStringオブジェクトに対してオーバーロードされません。また、オーバーロードすることもできません。Java で文字列の文字にアクセスするには、 などのアクセサー メンバー メソッドを使用する必要がありますcharAttoCharArrayクラスのメソッドを呼び出すこともできます。このメソッドはString、文字列オブジェクトの文字の配列を返し、この戻り値でインデックス演算子を使用できます。

char c = s.toCharArray()[i];
于 2013-09-19T07:24:36.043 に答える
0

C++ では、文字列は通常、文字の配列 (または文字へのポインター) であり、NULL (\0) 文字で終了します。配列を処理する場合と同様に、インデックスを付けることによって文字列を処理することもできます。
しかし Java では、文字列は配列ではありません。Java 文字列は型のオブジェクトであるjava.lang.Stringため、索引付けによって処理することはできません。

于 2013-09-19T07:16:09.430 に答える
0

C++ の文字列は既に文字の配列として扱われますが、Java の文字列は組み込みクラスです。文字の配列とは異なります。

于 2013-09-19T07:05:17.120 に答える