clone() メソッドは、Cloneable インターフェイスを実装するクラスのオブジェクトのコピーを作成するために使用されます。デフォルトでは、オブジェクトがこのメソッドを呼び出す特定のクラスのメンバーを Object クラスが認識していないため、フィールドごとに をコピーします。したがって、クラスにプリミティブ データ型のメンバーのみがある場合は、オブジェクトの新しいコピーが作成され、オブジェクトの新しいコピーへの参照が返されます。ただし、クラスにいずれかのクラス型のメンバーが含まれている場合は、それらのメンバーへのオブジェクト参照のみがコピーされるため、元のオブジェクトと複製されたオブジェクトの両方のメンバー参照は同じオブジェクトを参照します。
Cloneable インターフェイスを実装していないクラスのオブジェクトに対して clone() メソッドを呼び出そうとすると、CloneNotSupportedException を受け取ります。 。このインターフェイスは タグ付きインターフェイスであり、その実装は、実装クラスのオブジェクトで Object.clone() メソッドを呼び出すことができることのみを示します。
構文<strong>protected Object clone() throws CloneNotSupportedException</strong>
Object.clone( ) デフォルトのクローン関数 メソッドの結果 (クラスに非基本データ型メンバーもある場合)。浅いコピーの場合、参照されるオブジェクトではなくオブジェクト参照のみがコピーされるため、複製されたオブジェクトも元のオブジェクトが参照するのと同じオブジェクトを参照します。
例public class ShallowCopyTest { public static void main(String args[]) { A a1 = new A(); A a2 = (A) a1.clone(); a1.sb.append("Tutorialspoint!"); System.out.println(a1); System.out.println(a2); } } class A implements Cloneable { public StringBuffer sb = new StringBuffer("Welcome to "); public String toString() { return sb.toString(); } public Object clone() { try { return super.clone(); } catch(CloneNotSupportedException e) { } return null; } }
Welcome to Tutorialspoint! Welcome to Tutorialspoint!
##ディープコピー
メソッド メンバーを使用して deep copy を実装します。これは、メンバー オブジェクトの複製も必要ですが、デフォルトの複製メカニズムでは実行されないためです。 例
public class DeepCopyTest { public static void main(String args[]) { A a1 = new A(); A a2 = (A) a1.clone(); a1.sb.append(" TutorialsPoint!"); System.out.println(a1); System.out.println(a2); } } class A implements Cloneable { public StringBuffer sb = new StringBuffer("Welcome to "); public String toString() { return sb.toString(); } public Object clone() { try { A a = (A) super.clone(); a.sb = new StringBuffer(sb.toString()); return a; } catch(CloneNotSupportedException e) { } return null; } }
Welcome to TutorialsPoint! Welcome to
以上がJava における clone() メソッドの重要性は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。