6

newキーワードを使用してオブジェクトを作成することと、を使用してオブジェクトを作成することの違いは何clone()ですか?メモリ割り当てに違いはありますか?

4

5 に答える 5

5

newコンストラクターに従ってオブジェクトをclone()作成し、新しいオブジェクトを作成し、元のオブジェクトの内容でフィールドを初期化します。

私はそれを理解しています、あなたはjavadocを読んでいるので、例を見てみましょう:

public class MyBaby implements Cloneable {

    int age = 0;
    String name = "Dolly";
    List<String> list = new ArrayList<String>();

    public static void main(String[] args) {
        MyBaby originalBaby = new MyBaby();
        originalBaby.setAge(1);
        try {
            // We clone the baby.
            MyBaby clonedBaby = (MyBaby) originalBaby.clone();
            // both babies now have: age 1, name "Molly" and an empty arraylist
            originalBaby.setAge(2);
            // originalBaby has age 2, the clone has age 1
            originalBaby.setName("Molly");
            // same goes for the String, both are individual fields
            originalBaby.getList().add("addedString");
            // both babies get the string added to the list, 
            // because both point to the same list.
            System.out.println(clonedBaby.toString());
        }
        catch (CloneNotSupportedException e) {}
    }
}

javadoc は次のように述べています。

このメソッドは、「ディープ コピー」操作ではなく、このオブジェクトの「浅いコピー」を実行します。

これは、赤ちゃんのリストの動作を説明しています。参照されている要素ではなく、参照がコピーされるため、コピーは「浅い」です。

もちろん、メモリ割り当ては異なる場合があります。

  1. コンストラクターでフィールドを初期化できます
  2. clone はフィールド、つまり配列を初期化できます
于 2012-11-30T14:45:49.417 に答える
3

new演算子は新しいオブジェクトをインスタンス化しますが、コピー コンストラクターclone()に似ています。メソッドは、メンバー属性の値もコピーされたオブジェクトのコピーを作成します。clone()

于 2012-11-03T05:04:18.207 に答える
1

簡単に言うと、

new はインスタンスを作成します

その間

clone は、インスタンスのクローンを返します。

于 2012-11-03T05:05:22.050 に答える
1

Clone()は、同じクラスの新しいインスタンスを作成し、すべてのフィールドを新しいインスタンスにコピーして返します (浅いコピー)。

newキーワードは、オブジェクトを作成する Java 演算子です ( http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html )。

于 2012-11-03T05:06:51.073 に答える
0
  • デフォルトのコンストラクターによるオブジェクトの new() 構築。
  • clone() は、参照の浅いコピーを行います。

オブジェクト作成のコストが高く、クローンを作成して動作を設定したい場合にのみ、クローンを使用する必要があります。

于 2020-09-08T02:59:50.483 に答える