关于java当中的浅拷贝

来源:互联网 发布:数据加密软件排行 编辑:程序博客网 时间:2024/05/29 06:58
import java.util.Date;public class User implements Cloneable {/* * 注意,浅拷贝的结果是引用对象拷贝不成功。 */private String username;private String password;private int age;private Date birthdate;private StringBuilder sb;public User(String username, String password, int age, Date birthdate,StringBuilder sb) {super();this.username = username;this.password = password;this.age = age;this.birthdate = birthdate;this.sb = sb;}public StringBuilder getSb() {return sb;}public void setSb(StringBuilder sb) {this.sb = sb;}public User(String username, String password, int age, Date birthdate) {this.username = username;this.password = password;this.age = age;this.birthdate = birthdate;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}

浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不

复制它所引用的对象。

这个例子当中Uesr User2 两个对象的值互不影响,但是如果使用user2.getSb()。append()方法的时候就会发现两个值都改变了,就是因为如果这样就是改变的引用的值,而直接new StringBuilder()是给自己新建一个值。


总之浅拷贝是引用复制不成功,克隆对象发生改变,原来的对象也会发生改变。


import java.util.Date;public class test {public static void main(String args[]) throws CloneNotSupportedException {User user = new User("guoxiaoming", "123456", 12, new Date(),new StringBuilder("oldsb"));System.out.println(user.getAge());User user2 = (User) user.clone();user2.setAge(13);user2.setPassword("123");//user2.getSb().append("plus NewSb");user2.setSb(new StringBuilder("NewSb"));System.out.println(user.getAge());System.out.println(user2.getAge());System.out.println(user.getPassword());System.out.println(user2.getPassword());System.out.println(user.getSb());System.out.println(user2.getSb());}}


0 0
原创粉丝点击