3

私の質問は次のとおりです: Public String(char[] value)。誰でも私を助けることができますか:すべての値[i]に対して内部的にループしますか? 具体的には、

Public String(char[] value) の意味は次のとおりです。

for each char[i]
returnedSTRING = returnedSTRING + char[i] 

か否か ?

4

4 に答える 4

6

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.copyOfSystem.arraycopyを呼び出します。

于 2012-06-26T13:38:57.190 に答える
2

char[]文字列オブジェクトは、すべての文字列文字を配列に内部的に保存します。このコンストラクターは、配列全体を内部表現にコピーするだけです。ソースを参照してください:

public String(char value[]) {
        int size = value.length;
        this.offset = 0;
        this.count = size;
        this.value = Arrays.copyOf(value, size);
}
于 2012-06-26T13:36:34.600 に答える
2

ドキュメントから:

文字配列引数に現在含まれている一連の文字を表すように、新しい String を割り当てます。文字配列の内容がコピーされます。文字配列を後で変更しても、新しく作成された文字列には影響しません。

文字配列の内容がコピーされます。 ソースコードによると、misshadoffが指摘したように、Arrays.copyOf(value, size)使用されています。ただし、 Arrays.copyOf(value, size)呼び出しは、C/C++ でSystem.arraycopyの呼び出しと同様に、実際に反復および割り当てを行うのではなく、実際にメモリをコピーします。memcpy()これは、通常のループよりもはるかに高速であるため、Java によって内部的に行われます。ホスト OS のメモリ管理機能を利用System.arraycopyするネイティブな方法です。

したがって、あなたの質問に答えるために、文字は for で反復処理されるのではなく、それらが配置されているメモリブロック全体が Java によって「一括」コピーされます

于 2012-06-26T13:39:05.040 に答える
1

String クラスのソース コードを参照してください。

ただし、Java のバージョンによって異なる場合があります。

于 2012-06-26T13:36:29.217 に答える