一 了解 arrays.copyof 底层为System.arraycopy
//:src表示源数组,srcPos表示源数组要复制的起始位置,desc表示目标数组,length表示要复制的长度。 System.arraycopy(a,0,b,0,1);
int[] a = {1, 2, 3};
int[] ints = java.util.Arrays.copyOf(a, 4);
clone 和 System.arraycopy 都为浅拷贝

User [] users=new User[] {new User("admin","admin@qq.com"),new User("maco","maco@qq,com"),new User("kitty","kitty@qq,com")}; User [] target=new User[users.length];//新建一个目标对象数组 System.arraycopy(users, 0, target, 0, users.length);//实现复制 User[] clone = users.clone(); System.out.println("源对象与目标对象的物理地址是否一样:"+(users[0] == target[0]?"浅复制":"深复制")); System.out.println("源对象与目标对象的物理地址是否一样:"+(users[0] == clone[0]?"浅复制":"深复制")); clone[0].setPassword("admin@sina.com"); System.out.println("修改后的users"); for (User user : users){ System.out.println(user); } }
二 深拷贝的几种方法
2.1 通过构造方法来实现
Address address = new Address("河南");
Address address1 = new Address("河南1");
User user =new User("juan","111",address);
User copy = new User(user.getName(),user.getPassword(),new Address(address.getCity()));
copy.setAddress(address1);
System.out.println(copy);
System.out.println(user==copy);
2.2通过重写clone来实现 但实体类必须实现cloneable 接口
User user1 = user.clone();
user1.getAddress().setCity("深圳");
2.3通过jackson的方式来实现
// 使用Jackson序列化进行深拷贝
ObjectMapper objectMapper = new ObjectMapper(); User copyUser = objectMapper.readValue(objectMapper.writeValueAsString(user), User.class);

本文介绍Java中数组拷贝的方法,包括Arrays.copyOf和System.arraycopy的使用,并探讨了浅拷贝与深拷贝的区别及实现方式,如通过构造方法、重写clone方法以及利用Jackson库进行对象序列化来完成深拷贝。
602

被折叠的 条评论
为什么被折叠?



