JAVA 克隆小实例

public class CloneDemo {
	public static void main(String[] args) {
		B b = new B();
		b.setName("B name");
		A a1 = new A();
		a1.setB(b);
		a1.setName("A name");
		
		A a2 = a1.cloneMyself();
		
		System.out.println(a1 == a2);//false
		System.out.println(a1.getB() == a2.getB());//false
	}
}

class A implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -1556039944244358522L;
	private String name;
	private B b;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public B getB() {
		return b;
	}
	public void setB(B b) {
		this.b = b;
	}
	
	//提供克隆方法
	public A cloneMyself(){
		A a = null;
		try {
			/**
			 * 将对象写入到内存数组中
			 */
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(this);
			
			/**
			 * 读取内存数组中的数据转换成对象
			 */
			ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
			ObjectInputStream ois = new ObjectInputStream(bais);
			a = (A) ois.readObject();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return a;
	}
	
	
}

class B implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -1984117425001746882L;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

猜你喜欢

转载自blog.csdn.net/xy87940020/article/details/79000726