其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力,就需要实现Cloneable接口,重写clone方法。通过克隆方法得到的对象得到的是一个本地的副本。

代码示例:

class User implements Cloneable{

  int age;

  public User(int age){

    //用this关键字不至于类成员变量与形参混淆

    this.age=age;

  }


  //这里可加@Override也可不加,加了会自动提示是否正确

  @Override

  public Object clone{

    Object o=null;

    try{

      o=super.clone();

    }catch(CloneNotSupportedException e){

      e.printStackTrace();

    }

  }

  public String toString(){

    return Integer.toString(this.age);

  }

}


public class Test{

  //(1)main中只能调用静态方法(2)修改的是传入的User对象

  static User g(User u){

    u.age++;

    return u;

  }


  //在本地产生了一个User对象副本

  static User f(User u){

    u=(User)u.clone();

    u.age++;

    return u;

  }


  public static void main(String[] args){

    User u=new User(23);

    User u2=g(u);

    if(u==u2)

      System.out.println("u==u2");

    else

      System.out.println("u!=u2");

    //下面会自动调用User对象的toString()方法

    System.out.println("u.age:"+u);

    System.out.println("u2.age:"+u2);


    User u3=new User(23);

    User u4=f(u3);

    if(u3==u4)

      System.out.println("u3==u4");

    else

      System.out.println("u3!=u4");

    System.out.println("u3.age:"+u3);

    System.out.println("u4.age:"+u4);

  }

}


//基本知识:要想让对象具有clone方法,只要实现Cloneable接口,重写clone方法即可,但是有两个需要注意的点:(1)调用super.clone()方法(2)定义为public公共方法


/**--注意--**/

以上代码都是在文本编辑器中写的,可能会有些许纰漏