私の質問は次のとおりです: Public String(char[] value)。誰でも私を助けることができますか:すべての値[i]に対して内部的にループしますか? 具体的には、
Public String(char[] value) の意味は次のとおりです。
for each char[i]
returnedSTRING = returnedSTRING + char[i]
か否か ?
私の質問は次のとおりです: Public String(char[] value)。誰でも私を助けることができますか:すべての値[i]に対して内部的にループしますか? 具体的には、
Public String(char[] value) の意味は次のとおりです。
for each char[i]
returnedSTRING = returnedSTRING + char[i]
か否か ?
Java はオープン ソースであり、ソースを Eclipse にアタッチすると、いつでも F3 を使用して機能を確認できます。この場合、 String クラスには、探している次のコンストラクターがあります。
/**
* Allocates a new {@code String} so that it represents the sequence of
* characters currently contained in the character array argument. The
* contents of the character array are copied; subsequent modification of
* the character array does not affect the newly created string.
*
* @param value
* The initial value of the string
*/
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
編集:不思議に思っているなら、Arrays.copyOfはSystem.arraycopyを呼び出します。
char[]
文字列オブジェクトは、すべての文字列文字を配列に内部的に保存します。このコンストラクターは、配列全体を内部表現にコピーするだけです。ソースを参照してください:
public String(char value[]) {
int size = value.length;
this.offset = 0;
this.count = size;
this.value = Arrays.copyOf(value, size);
}
ドキュメントから:
文字配列引数に現在含まれている一連の文字を表すように、新しい String を割り当てます。文字配列の内容がコピーされます。文字配列を後で変更しても、新しく作成された文字列には影響しません。
文字配列の内容がコピーされます。
ソースコードによると、misshadoffが指摘したように、Arrays.copyOf(value, size)
使用されています。ただし、 Arrays.copyOf(value, size)
呼び出しは、C/C++ でSystem.arraycopy
の呼び出しと同様に、実際に反復および割り当てを行うのではなく、実際にメモリをコピーします。memcpy()
これは、通常のループよりもはるかに高速であるため、Java によって内部的に行われます。ホスト OS のメモリ管理機能を利用System.arraycopy
するネイティブな方法です。
したがって、あなたの質問に答えるために、文字は for で反復処理されるのではなく、それらが配置されているメモリブロック全体が Java によって「一括」コピーされます。
String クラスのソース コードを参照してください。
ただし、Java のバージョンによって異なる場合があります。