我现在已经生成了一个A类的实例a1,现在需要一个和它一模一样的另一个实例a2。我不想重新new一遍A这个类,因为这样很耗时间!当然更不能采用A a2 = a1;这样的写法,因为需要的是两个不同的实例,虽然他们的功能与内容完全相同。
所以请教各位,怎样比较简单的复制一个对象。

解决方案 »

  1.   

    有两个HashMap 分别firstResult,reMap 
    firstResult = (HashMap) reMap.clone();一般我都这么用,如果只是简单的firstResult=reMap ,那么在改变其中一个值另一个也改变,呵呵,想想这是为什么吧?
      

  2.   

    等号是属于地址传递,这样做的结果会导致,修改a2的值同时也许会修改a1.
    我在做程序的时候是用过一种方法.不过是用list进行复制的.不过你可以试一下.import java.util.LinkedList ;
    import java.util.List ;/*
     * 作成日: 2005/12/23
     *
    public class test { public static void main ( String[] args ) {
    List test = new LinkedList () ;
    for ( int i = 0 ; i < 5 ; i++ ) {
    test.add ( i , "str" + i ) ;
    }
    for ( int i = 0 ; i < 5 ; i++ ) {
    System.out.println ( (String)test.get ( i ) ) ;
    }
    System.out.println("**************************");

    List testSample = new LinkedList ( test ) ;
    for ( int i = 0 ; i < 5 ; i++ ) {
    System.out.println ( (String)testSample.get ( i ) ) ;
    }
    System.out.println("**************************");
    for ( int j = 0 ; j < 5 ; j++ ) {
    if ( j > 3 ) {
    testSample.set ( j , "sample" ) ;
    }
    }
    for ( int i = 0 ; i < 5 ; i++ ) {
    System.out.println ( (String)testSample.get ( i ) ) ;
    }
    System.out.println("**************************");
    for ( int i = 0 ; i < 5 ; i++ ) {
    System.out.println ( (String)test.get ( i ) ) ;
    }
    System.out.println("**************************");

    }
    }
    执行结果:
    str0
    str1
    str2
    str3
    str4
    **************************
    str0
    str1
    str2
    str3
    str4
    **************************
    str0
    str1
    str2
    str3
    sample
    **************************
    str0
    str1
    str2
    str3
    str4
    **************************从执行结果可以看出,两个LIST是不同的,在修改过第二个list后,前一个list的值没有改变.
      

  3.   

    想不new应该是不可能的,还得根据你自A类的结构自己进行成员copy。麻烦着呢^_^
      

  4.   

    刚才只是想到用java提供的类.
    如果是自己写的类,可以让类具有能克隆的方法:
    具体方法如下:
    自己的类做成:我测试用的是fatherClone 这个类,要复制它.
    /*
     * 作成日: 2005/12/23
     *
     * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
     * ウィンドウ - 設定 - Java - コード&#12539;スタイル - コード&#12539;テンプレート
     */package objectClone ;import java.io.Serializable ;/**
     * @author wg
     * 
     * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ: ウィンドウ - 設定 - Java - コード&#12539;スタイル -
     * コード&#12539;テンプレート
     */
    public class fatherClone implements Serializable , Cloneable { String name = null ; String age = null ; String monkey = null ; String address = null ; public Object clone () throws CloneNotSupportedException {
    return super.clone () ;
    } /**
     * @return address を戻します。
     */
    public String getAddress () {
    return address ;
    } /**
     * @param address address を設定。
     */
    public void setAddress ( String address ) {
    this.address = address ;
    } /**
     * @return age を戻します。
     */
    public String getAge () {
    return age ;
    } /**
     * @param age age を設定。
     */
    public void setAge ( String age ) {
    this.age = age ;
    } /**
     * @return monkey を戻します。
     */
    public String getMonkey () {
    return monkey ;
    } /**
     * @param monkey monkey を設定。
     */
    public void setMonkey ( String monkey ) {
    this.monkey = monkey ;
    } /**
     * @return name を戻します。
     */
    public String getName () {
    return name ;
    } /**
     * @param name name を設定。
     */
    public void setName ( String name ) {
    this.name = name ;
    }
    }
    测试代码:
    /*
     * 作成日: 2005/12/23
     *
     * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
     * ウィンドウ - 設定 - Java - コード&#12539;スタイル - コード&#12539;テンプレート
     */package objectClone ;/**
     * @author wg
     * 
     * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ: ウィンドウ - 設定 - Java - コード&#12539;スタイル -
     * コード&#12539;テンプレート
     */
    public class cloneTest { public static void main ( String[] args ) {
    fatherClone test = new fatherClone () ;
    test.setAddress ( "abce" ) ;
    test.setAge ( "129" ) ;
    test.setMonkey ( "12wan#" ) ;
    test.setName ( "ccwg" ) ;
    try {
    fatherClone test2 = (fatherClone)test.clone () ;
    test2.setName("tom");

    System.out.println(test.getName());
    System.out.println(test.getAge());
    System.out.println("*************************");
    System.out.println(test2.getAge());
    System.out.println(test2.getName());
    } catch ( Exception e ) {
    e.printStackTrace () ;
    }
    }
    }我测试过
      

  5.   

    能 NEW则new 玩克隆 浅克隆 深克隆 搞起来累的 要么 OBJECT序列化??是静安寺不是道明寺,是源程序不是言承旭;是在静安寺写源程序,不是在流星花园看F4。