1-1:システムは、あなたがアレイ間のレプリケーションを実現するために、このメソッドを使用することができます)(ネイティブの静的メソッドのarraycopyを提供します。通常の一次元アレイの場合、値は各要素が値によって渡される別の配列、コピー元の値には影響しません変更に各アレイ内で複製されるであろう。次のように例示的な方法プロトタイプのコピーはプリミティブ配列をコピーします。
/ **
* System.arraycopyのメソッドプロトタイプ
* @Param SRCソース配列をコピーします
* @Param srcPos源アレイ(0から始まる)開始位置を複製します
コピーする* @Param DEST対象の配列
* @パラメータdestPos(0から始まる)標的配列の開始位置
コピーする* @Param長長
* /
パブリック静的ネイティブボイドのarraycopy(オブジェクトSRC、srcPosをint型、
オブジェクトDEST、INT destPos、int型の長さ)。
パブリック静的無効メイン(文字列[] args){
INT [] NUMS = {1024、1025、1026、1028 1027}。
INT [] copyOfNums =新しいint型[nums.length]。
System.arraycopyの(NUMS、0、copyOfNums、0、nums.length)。
//配列のコピーの要素を変更
copyOfNums [3] = 1234。
//元の配列の変化かどうかを観察
System.out.println(Arrays.toString(NUMS))。
}
出力:[1024、1025、1026、1027、1028]
は、値によって渡され、プレーン配列をコピーする場合、各要素の値を新しい配列にコピーし、そのコピーを元の値には影響しません変更しますので。
文字列の配列は、より特別で、コードを見て:
文字列[]名= { "昭君"、 "人魚"、 "Yuanyuan"、 "ヤン玉環"、 "蘇妲己"}。
System.out.println(「一次配列値、各ハッシュコード:」)。
以下のための(文字列名:名){
System.out.print(Integer.toHexString(name.hashCode())+ "");
}
文字列[] copyOfNames =新しいString [names.length]。
System.arraycopyの(名前、0、copyOfNames、0、names.length)。
copyOfNames [1] = "羅Zhenshi"。
System.out.println(「アレイハッシュコード、ハッシュコード素子1の各要素の\ nのコピーが変更されています:」);
用(文字列名:copyOfNames){
System.out.print(Integer.toHexString(name.hashCode())+ "");
}
System.out.println();
//元の配列要素が変更されていないコンテンツcopyOfNames修飾しました
System.out.println(Arrays.toString(名前));
以下の結果を実行した後:
元の配列のハッシュコードの各要素。
1be7059、225f8ec、23f0508、1929eae、1f6458e、
ハッシュコードの1番要素が変更され、アレイのハッシュコードの各要素をコピーします。
1be7059、336eea6e、23f0508、1929eae、1f6458e、
[昭君、人魚、Yuanyuan、ヒスイのブレスレット、蘇妲己]
次のようにメモリは次のようになります。
1-2:オブジェクトのコピー配列
//エンティティクラス
パブリッククラス美容{
プライベート文字列名;
プライベートint型のレベル。
プライベートダブルフェイス。
パブリックビューティー(){}
公共ビューティー(文字列名、int型のレベル、ダブルフェイス){
this.setName(名);
this.setLevel(レベル)。
this.setFace(面)
}
@オーバーライド
パブリック文字列のtoString(){
名前+ " "+レベル+"、" +顔を返します。
}
//省略ゲッター/セッター
}
//試験方法
パブリッククラスArraycopyDemo {
パブリック静的無効メイン(文字列[] args){
ビューティー[]美女=新しい美[5]。
美し[0] =新しい美( "昭君"、5、86.25)。
美し[1] =新しい美( "人魚"、6、76.25)。
美し[2] =新しい美( "Yuanyuan"、7、56.25)。
美し[3] =新しい美( "ヤン玉環"、8、66.25)。
美し[4] =新しい美( "蘇妲己"、9、96.25)。
ビューティー[] newBeauties =新しい美[beauties.length]。
System.arraycopyの(美しさ、0、newBeauties、0、beauties.length)。
//変更された配列要素のプロパティをコピーします
newBeauties [1] .setName( "羅Zhenshi")。
//元の配列の内容を印刷する、観測番号1要素のname属性が変更されています
{:(美人美容美)について
System.out.println(美)。
}
}
}
結果:
次のようにメモリは動作します:
結論:
1、配列は一次元配列であり、要素の型がプリミティブ型またはStringである、ディープコピーである場合、すなわち、新たなアレイに元の配列の要素が互いに影響しないであろう
配列が多次元配列、またはAである場合、2要素の二次元アレイは、浅いコピーに属する、参照型である同じオブジェクトへの参照の配列と元の配列の新しい要素
をコピーするために、2つの配列要素に対応する、ことをここ衝撃、必ずしもインデックスがに割り当てられていない
文字列なぜなら、その不変の特別な
多次元配列配列の各要素の寸法は、一次元又は多次元アレイ、オブジェクトの配列の効果の結果の最初のアドレスであるようにコピーが同一である場合、実際に理解することができます
古い9つの学校:マイクロチャンネル公衆番号への注目ドライノートより