JAVA克隆对象
一、克隆的含义:克隆一个对象,其属性会保持一样,但两个对象的引用并不相同。
二、克隆的实现:1)clone()方法,返回的是Object对象,需要强制转换;2)类必须实现Cloneable接口,并且重写Objet类的clone()方法.
三、代码实现
1.定义一个类并实现Cloneable接口
2.重写该类的equals方法
3.测试
package com.zyl.learn.common; /** * Created by zyl on 2015/8/2. */ public class Person implements Cloneable { private String name; private String sex; private int age; public Person(String name, String sex, int age) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false; if (name != null ? !name.equals(person.name) : person.name != null) return false; if (sex != null ? !sex.equals(person.sex) : person.sex != null) return false; return true; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (sex != null ? sex.hashCode() : 0); result = 31 * result + age; return result; } }
3.测试代码
import com.zyl.learn.common.Person; public class clone { public static void main(String[] args) { Person person = new Person("xiao ming", "male", 21); Person clonePerson = (Person) person.clone(); System.out.println("人和克隆人属性:" + person.equals(clonePerson)); System.out.println("人和克隆人:" + (person == clonePerson)); } }4.输出:
人和克隆人属性:true
人和克隆人:false
四、总结
1.克隆类的实现方法
2.克隆对象的本质是独立新空间的复制品