System.arraycopy()メソッドは、オブジェクト間またはアレイ間のコピーの実現について詳しく説明しています。

1.ディープコピーとシャローコピーの違い

         Java配列のコピー操作は、ディープコピーとシャローコピーに分けることができます。簡単に言うと、ディープコピーはオブジェクトの値とオブジェクトのコンテンツをコピーできます。シャローコピーとは、オブジェクト参照のコピーを指します。

2つ目は、System.arraycopy()メソッドがコピーを実現することです。

1.ネイティブの静的メソッドarraycopy()がSystemで提供されており、アレイ間でコピーするために使用できます。1次元配列の場合、この種のコピー属性値の転送、コピーの変更は元の値に影響しません。オブジェクトが2次元または1次元の配列に格納されている場合、コピーの結果、1次元の参照変数がコピーの1次元の配列に渡されます。コピーが変更されると、元の配列が影響を受けます。

 

2.System.arraycopyの関数プロトタイプは次のとおりです。

 

public static void arraycopy(Object src、
                             int srcPos、
                             Object dest、
                             int destPos、
                             int length)

その中で、srcはソース配列を表し、srcPosはコピーされるソース配列の開始位置を表し、descはターゲット配列を表し、lengthはコピーされる長さを表します。

 

3.System.arraycopyを使用して配列コピーを実装する例:

 

[java]  プレーン  コピーを表示  

package com.shuzu;  

/ *システムはネイティブメソッドarraycopy()を提供します* /  

パブリッククラスSsytemArrayCopy {  

    public static void main(String [] args){  

       ユーザー[] users = new User [] {new User(1、 "admin"、 "[email protected]")、new User(2、 "maco"、 "maco @ qq、com")、new User(3 、 "kitty"、 "kitty @ qq、com")}; //初期初期化異性数組  

       User [] target = new User [users.length]; //新しいターゲットオブジェクト配列を作成します  

       System.arraycopy(users、0、target、0、users.length); //コピーを実現  

       System.out.println( "ソースオブジェクトとターゲットオブジェクトの物理アドレスは同じですか:" +(users [0] == target [0]? "Shallow copy": "Deep copy"));  

       target [0] .setEmail( "[email protected]");  

       System.out.println( "ターゲットオブジェクトの属性値を変更した後のソースオブジェクトユーザー:");  

       for(ユーザーユーザー:ユーザー){  

           System.out.println(user);  

       }           

    }  

}  

クラスユーザー{  

    プライベート整数ID;  

    プライベート文字列ユーザー名;  

   プライベート文字列メール;  

   //パラメータコンストラクタなし  

   public User(){}  

    //パラメータを持つコンストラクタ  

    public User(Integer id、String username、String email){  

       素晴らしい();  

       this.id = id;  

       this.username =ユーザー名;  

        this.email = email;  

    }  

    public Integer getId(){  

       IDを返します。  

    }  

    public void setId(Integer id){  

        this.id = id;  

    }  

   public String getUsername(){  

      ユーザー名を返す;  

    }  

   public void setUsername(String username){  

        this.username =ユーザー名;  

    }  

    public String getEmail(){  

       メールを返す;  

    }  

    public void setEmail(String email){  

        this.email = email;  

    }  

   @オーバーライド  

    public String toString(){  

        return "User [id =" + id + "、username =" + username + "、email =" + email  

                + "]";  

    }  

}  

 

プログラムを実行した結果:

次の図は、System.arraycopy()のコピープロセスです。

おすすめ

転載: blog.csdn.net/u010460625/article/details/109031757