• java对象复制


    一,a和b都指向同一个对象,改变其中一个另一个也会改变

    package com.ciaos;
    
    class Human{
        public Human(String string, int i) {
            // TODO Auto-generated constructor stub
            name = string;
            age = i;
        }
        String name;
        int age;
    }
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    /*        int num[][] = {{1,2,3,4},{5,6,7,8},{2,3,4,5},{4,5,6,7}};
            for(int x[]:num){
                for(int y:x){
                    System.out.print(y);
                }
            }*/
            Human a = new Human("ciaos",26);
            System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26
            
            Human b = a;
            b.name = "stone";
            System.out.println("a:"+a.name+" "+a.age);//a:stone 26
            System.out.println("b:"+b.name+" "+b.age);//b:stone 26
        }
    }

    二,继承Cloneable接口,实现clone方法,实现浅拷贝

    package com.ciaos;
    
    class Human implements Cloneable{
        public Human(String string, int i) {
            // TODO Auto-generated constructor stub
            name = string;
            age = i;
        }
        String name;
        int age;
        
        public Object clone(){
            Human h = null;
            try {
                h = (Human)super.clone();
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return h;
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Human a = new Human("ciaos",26);
            System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26
            
            Human b = (Human)a.clone();
            b.name = "stone";
            System.out.println("a:"+a.name+" "+a.age);//a:ciaos 26
            System.out.println("b:"+b.name+" "+b.age);//b:stone 26
        }
    }

    三,如果对象中有变量指向别的对象,成员变量指向的对象仍然是同样的

    package com.ciaos;
    
    class Addr{
        public Addr(String country2, String city2) {
            // TODO Auto-generated constructor stub
            country = country2;
            city = city2;
        }
        String country;
        String city;
    }
    
    class Human implements Cloneable{
        public Human(String string, int i, String country, String city) {
            // TODO Auto-generated constructor stub
            name = string;
            age = i;
            addr = new Addr(country,city);
        }
        String name;
        int age;
        Addr addr;
        
        public Object clone(){
            Human h = null;
            try {
                h = (Human)super.clone();
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return h;
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Human a = new Human("ciaos",26,"china","shenzhen");
            System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen
            
            Human b = (Human)a.clone();
            b.name = "stone";
            b.addr.city = "shanghai";
            System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shanghai
            System.out.println("b:"+b.name+" "+b.age+" "+b.addr.country+" "+b.addr.city);//b:stone 26 china shanghai
        }
    }

    四,需要对成员变量指向对象的类继承拷贝接口,修改Human类复制方法

    package com.ciaos;
    
    class Addr implements Cloneable{
        public Addr(String country2, String city2) {
            // TODO Auto-generated constructor stub
            country = country2;
            city = city2;
        }
        String country;
        String city;
        public Object clone(){
            Addr a = null;
            try {
                a = (Addr)super.clone();
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return a;
        }
    }
    
    class Human implements Cloneable{
        public Human(String string, int i, String country, String city) {
            // TODO Auto-generated constructor stub
            name = string;
            age = i;
            addr = new Addr(country,city);
        }
        String name;
        int age;
        Addr addr;
        
        public Object clone(){
            Human h = null;
            try {
                h = (Human)super.clone();
                h.addr = (Addr)this.addr.clone();
            } catch (CloneNotSupportedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return h;
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Human a = new Human("ciaos",26,"china","shenzhen");
            System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen
            
            Human b = (Human)a.clone();
            b.name = "stone";
            b.addr.city = "shanghai";
            System.out.println("a:"+a.name+" "+a.age+" "+a.addr.country+" "+a.addr.city);//a:ciaos 26 china shenzhen
            System.out.println("b:"+b.name+" "+b.age+" "+b.addr.country+" "+b.addr.city);//b:stone 26 china shanghai
        }
    }
  • 相关阅读:
    [Algorithm] Delete a node from Binary Search Tree
    [Javascript] Check both prop exists and value is valid
    对象的多态性
    spring 定时任务(3)--配置多个定时任务
    能上QQ无法打开网页
    [置顶] Ajax核心--XMLHttpRequest对象
    linux内核--进程地址空间(一)
    [SQL]一个删选数据的例子,使用GROUP、DISTINCT
    [置顶] 腾讯2014软件开发笔试题目
    DBS小结
  • 原文地址:https://www.cnblogs.com/ciaos/p/3483414.html
Copyright © 2020-2023  润新知