2017-02-22 22 views
0

JavaのClone()メソッドは、あるオブジェクトを別のオブジェクトに複製する方法を提供します。最初のオブジェクト。 私の質問は、clone()を使用して、値渡しを使用して同等または同等の違いがあるということです。clone()メソッドは、Javaの値渡しの概念と同等です

+3

いいえ、彼らは決して関連していません。 – Kayaman

答えて

1

@Kayamanとは関係がありませんが、行動は似ています。クローンはメモリ内の新しい場所にコピーを作成するので、第2のオブジェクトによる変更は第1のオブジェクトに反映されません。メソッドでこのクローンをパラメータとして使用し、このメソッドによって変更された場合、変更はクローンに反映されます。クローンされたオブジェクトの参照渡しです。

+0

Javaは厳密には値渡しです。それは参照渡しではありません。 –

+0

あなたがmodify(2)を呼び出した場合、私は同意しなければなりません。これは値渡しですが、あなたがmodify(car)を呼び出した場合です。これは参照渡しであり、すべてのオブジェクトはjavaで参照渡しされます。 – Wael

+0

オブジェクトはJavaではまったく渡されません。オブジェクトの_Pointers_はJavaで渡されます。価値によって。あなたがそれが好きなら反対しますが、あなたは事実に反対するでしょう。調べる。私はこれを発明していない。値渡しとはどのように伝えることができますか?メソッドがパラメータを再割り当てすると、呼び出し元は変更を認識しません。それは参照渡しではないことをあなたが知っている方法です。真剣に、それを見てください。 –

1

値渡しとは、オブジェクトのコピーを呼び出された関数に渡すことを意味します。オブジェクトを複製してから関数に渡すと、同じ効果が得られ、複製されたオブジェクトの変更は元のオブジェクトに反映されません。

ただし、オブジェクトをどのように複製するかによって異なります。浅いクローニングを使用してオブジェクトをクローン化し、それを関数に渡して、クローンオブジェクト内のオブジェクトの参照に対して操作を実行すると、参照されるオブジェクトが変更され、その効果が多少異なる可能性があります。この場合

class A 
{ 
int a; 
} 

class B implements Cloneable{ 
int b; 
A a; 
public B clone(){ 
B obj= new B(); 
obj.b=this.b; 
obj.a=this.a; 
} 
} 

クローンメソッドは、オブジェクトAの参照をコピーすると、このオブジェクトへの変更が実際に変化をもたらすであろう:例について

oのオブジェクト。

したがって、値渡しと同じ効果を得るには、深いクローニングを使用する必要があります。

あなたの質問にお答えください。彼らはです!

+0

Javaはメソッドにオブジェクトを渡すことはなく、オブジェクトのコピーははるかに少なくなります。 Javaでは、値渡しとは、「オブジェクトのコピーを呼び出された関数に渡している」という意味ではありません。それが意味することは、メソッド引数には呼び出し元ルーチンが渡されたときと同じ値が呼び出されるということです。したがって、メソッド内のパラメータ値の変更は、呼び出し側には表示されません。参照(ポインタ)引数の場合、これは深いクローニングの_opposite_です。したがって、この回答の目的とは反対です。 _same_オブジェクトへのポインタは、クローンではなく呼び出し元のものとして渡します。間違っているために下落した。 –

+0

@LewBloch決して私の答えでは、私はオブジェクトがメソッドに渡されると述べた。私の唯一の提案は、クローニングは価値のあるものを渡すために同様の結果をもたらすということでした。 "呼び出された関数にオブジェクトのコピーを渡す"これは、オブジェクトのコピーではなく、複製されたオブジェクトを参照することを意味します。私はあなたが私の答えを間違って理解したと思います。 –

+0

オブジェクトをメソッドに渡すという言葉を引用した部分を除いては? –

関連する問題