4

浅いコピーとは、プリミティブ値であれ参照値であれ、同じ属性値を持つオブジェクトの「コピー」を意味します。

浅いコピーを実行する際に、「新しいインスタンスを作成する」必要がありますか? なので:

public class A {
    int aValue;
    B bObj;

    ...

    public A createShallow(A a1Obj) {
        A aObj = new A();
        aObj.aValue = a1Obj.aValue;
        aObj.bObj = a1Obj.bObj;

        return aObj;
    }
}

または、割り当てによるコピーも浅いコピーと見なされます。

B b = new B(10);
A a = new A(1, b);

A a1 = a;

ウィキペディアのこの記事では、同じメモリ ブロックを共有する参照変数としてシャロー コピーを定義しています。したがって、このコピーによる割り当ても浅いコピーになります。

しかし、オブジェクトの「コピー」ではなく、同じオブジェクトを指す変数ではありませんか?

4

4 に答える 4

4

浅いコピーの実行中に「新しいインスタンスを作成」する必要がありますか?

はい、shallowオブジェクトのコピー (または)を作成するには、インスタンスを作成する必要がありdeepます。参照の割り当てを行うだけでcopy of reference、同じインスタンスを指す が作成されます。

non-static methodを作成している を使用しましたcopy。しかし、一般的に私は2つの方法を好みます: -

どちらかを使用しますcopy-constructor: -

public A(A obj) {
    copy.aValue = obj.aValue;
}

そしてそれを次のように使用します: -

A first = new A();
A copy = new A(first);

または、public static methodインスタンスを取り、そのコピーを返す a を使用します。

public static A createCopy(A obj) {
    A copy = new A();
    copy.aValue = obj.aValue;
    return copy;
}
于 2012-12-02T08:17:40.217 に答える
3

割り当てはコピーではありません。同じインスタンスへの 2 番目の参照です。

コピーは新しいインスタンスである必要があり、そうでない場合はコピーではありません。それは単なる別の参照です。

于 2012-12-02T08:12:11.453 に答える
0

浅いコピーの実行中に「新しいインスタンスを作成」する必要がありますか? なので:

はい、必要です。

または、割り当てによるコピーも浅いコピーと見なされます。

いいえ、これはまったく別の操作です。コピーはありません。これは、既存のオブジェクトへの新しい参照を作成するだけです。この新しい参照を使用してオブジェクトを変更すると、元のオブジェクトが変更されます。

于 2012-12-02T08:15:20.983 に答える
0

参照割り当ては新しいオブジェクトを作成しませんが、既存のオブジェクトを指すだけです。

于 2012-12-02T08:16:01.933 に答える