5

最近 Java に移行しましたが、変数のエイリアシングに問題がありました。どこでも検索しましたが、同じオブジェクトを参照するだけで、あるオブジェクトの内容を別のオブジェクトにコピーする適切な方法が見つからないようです。誰か提案はありますか?

編集:エイリアシングの問題が発生しているのが int の場合はどうなりますか? そもそも、このような状況を避けるべきでしょうか? もしそうなら、どのように?

4

5 に答える 5

11

クラスがClonableインターフェースを実装している場合、 Object.clone()メソッドを使用してハードコピーを作成できます。ウィキペディアのエントリには、いくつかの優れた詳細があります。

別の方法は、このページによるとより安全なコピー コンストラクターを使用することです。

于 2009-04-25T19:47:50.137 に答える
4

「内容」によります。たとえば、FileInputStream をコピーするだけで、両方が同じファイルから引き続きロードされると想定することはできません。

基本的に、2 つの方法があります。クラスが「Cloneable」インターフェイスをサポートしている場合、clone() を呼び出してクローンを作成できます。そうでない場合は、多くの場合、別のオブジェクトからデータをコピーするコピー コンストラクターがあります。

通常、浅いコピーになります (つまり、クラスのすべてのフィールドがコピーされますが、それらは同じオブジェクトを指します)。

一方、多くのオブジェクトは (String クラスのように) イミュータブルになるように設計されており、変更できないため、そのようなオブジェクトをコピーする必要はありません。

于 2009-04-25T19:53:47.297 に答える
2


もう 1 つのオプションは、不変 オブジェクトを作成するようにクラスを設計することです

。作成されたら。したがって、複数の変数が同じオブジェクトを指すことはできますが、オブジェクトの状態を変更することはできません。

于 2012-11-30T19:42:31.780 に答える
1

Javaで参照への暗黙の参照を持つことはできないため、変数のエイリアスを作成することはできません。

おそらく、あなたが達成しようとしていることを説明すれば、私たちは「エイリアス」なしでそれを行うのを助けることができます

編集:あなたは本当にint値をエイリアシングすることによってあなたが何を意味するのかを説明する必要があります。int値は実行時に匿名であるため、エイリアスを設定しても意味がありません。

于 2009-04-26T07:05:16.373 に答える
1

java.lang.Cloneable はあなたが探しているものです。

于 2009-04-25T19:45:11.407 に答える