由Map的复制问题引发对深复制和浅复制的思考
前几天写程序遇到了这样的一个问题:
[java] view plaincopy
- Map<String, Object> args=getparameters();
- Map<String, Object> hot_args=args;
- hot_args.put("sortItem","pv");
- Map<String, Object> common_args=args;
- common_args.put("dateId","week");
所谓浅复制:则是只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存。被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
下面是我写的一个实现深复制的案例:(实现对POJO对象的深复制)
User.java
[java] view plaincopy
- package text.copy;
- public class User implements Cloneable {
- private String name;
- private String passwd;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPasswd() {
- return passwd;
- }
- public void setPasswd(String passwd) {
- this.passwd = passwd;
- }
- public Object clone()//重写Cloneable接口的clone()方法
- {
- User user=null;
- try{
- user=(User)super.clone();//将一个实例克隆,并抛出异常
- }catch(CloneNotSupportedException e)
- {
- e.printStackTrace();
- }
- return user;
- }
- }
[java] view plaincopy
- User user1=new User();
- user1.setName("Lily");
- User user2=(User)user1.clone();
- user2.setName("admin");
- System.out.println("user1.name:"+user1.getName());
- System.out.println("user2.name:"+user2.getName());
- user1.name:Lily
- user2.name:admin
[java] view plaincopy
- Map<String, Object> args=getparameters();
- Map<String, Object> hot_args=new HashMap<String, Object>();
- hot_args.putAll(_args);
- hot_args.put("sortItem","pv");
- Map<String, Object> common_args=new HashMap<String, Object>();
- common_args.putAll(_args);
- common_args.put("dateId","week");
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了