java 对象复制问题

Student.java

public class Student  {


	public String userName;

	public String age;

	public String getAge() {
		return age;
	}

	public String getUserName() {
		return userName;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
}

ObjectClone.java

public class ObjectClone {


	public static void main(String[] args) {
		Student student = new Student();
        student.setAge("10");
        student.setUserName("oracle");
	    Student student2 = new Student();
	    student2 = student;
	    student2.setUserName("Mysql");
	    System.out.println("s1:"+student.getUserName()+"  "+student.getAge());
	    System.out.println("s2:"+student2.getUserName()+"  "+student2.getAge());
	}

}

输出结果:

s1:Mysql  10
s2:Mysql  10


这并不是我想要的结果,我许改的值是s2的姓名,s1不应该改变,但是改变了,这就出现了问题,这个原因就是:

student2 = student;

这一句代码,只是将student的引用给了student2,这样修改一个的内容,两个对象都会改变,因为这两个对象在内存中是一个值。

所以要对实体类做如下修改:

public class Student implements Cloneable {


	public String userName;

	public String age;

	public String getAge() {
		return age;
	}

	public String getUserName() {
		return userName;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
       // 这是重写cloneable 的 clone方法
	@Override
	public Object clone() {
		Student student = null;
		try {
			student = (Student) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return student;
	}
}

ObjectClone.java

public static void main(String[] args) {
		Student student = new Student();
        student.setAge("10");
        student.setUserName("oracle");
	    Student student2 = new Student();
	    //这是修改的赋值代码
	    student2 = (Student)student.clone();
	    student2.setUserName("Mysql");
	    System.out.println("s1:"+student.getUserName()+"  "+student.getAge());
	    System.out.println("s2:"+student2.getUserName()+"  "+student2.getAge());
	}

输出结果:

s1:oracle  10
s2:Mysql  10


这样就是想要的结果了。



参考:http://en.wikipedia.org/wiki/Clone_%28Java_method%29

你可能感兴趣的:(java,对象复制)