21xrx.com
2024-11-05 23:23:55 Tuesday
登录
文章检索 我的文章 写文章
深拷贝和浅拷贝,说法错误的是java
2023-08-10 15:01:50 深夜i     --     --
拷贝 深拷贝 浅拷贝 java错误

在Java中,深拷贝和浅拷贝是两个概念,它们存在于对象复制的过程中。深拷贝和浅拷贝的目的都是为了创建一个新的对象,但是它们在复制对象时的方式略有不同。

首先,我们来了解一下浅拷贝。浅拷贝是指将对象的引用复制给一个新的对象,新对象和原对象共享同一个引用,它们指向同一个内存地址。当我们修改其中一个对象时,另一个对象也会受到影响。可以说,浅拷贝只是创建了一个指向原对象的指针,而不是创建了一个独立的对象。


Person person1 = new Person();

person1.setName("John");

person1.setAge(25);

Person person2 = person1; // 浅拷贝

person2.setName("Tom");

System.out.println(person1.getName()); // 输出结果为Tom,person1和person2引用同一个对象

可以看到,当我们修改person2的名字时,person1的名字也被改变了,这是因为person1和person2指向同一个对象。

相反,深拷贝是指创建一个全新的对象,复制原对象的所有字段,包括其中引用的对象,而不是共享引用。这样,当我们修改其中一个对象时,另一个对象不会受到任何影响。

Java中没有对浅拷贝和深拷贝提供直接的支持,但我们可以通过一些方式来实现深拷贝。比如,可以通过实现Cloneable接口并重写clone()方法来实现深拷贝。


class Person implements Cloneable {

  private String name;

  private int age;

  

  // 构造函数和getter、setter省略

  

  @Override

  protected Object clone() throws CloneNotSupportedException {

    Person cloned = (Person) super.clone();

    // 深拷贝字段

    cloned.setName(new String(this.name));

    return cloned;

  }

}

// 使用深拷贝

Person person1 = new Person();

person1.setName("John");

person1.setAge(25);

Person person2 = (Person) person1.clone(); // 深拷贝

person2.setName("Tom");

System.out.println(person1.getName()); // 输出结果为John,person1和person2引用不同的对象

通过重写clone()方法,我们在深拷贝时创建了一个新的对象,并将原对象的字段值复制到新对象中,这样person1和person2引用的就是两个不同的对象。

综上所述,浅拷贝和深拷贝是Java中的两个概念,用于对象的复制。浅拷贝只是复制了对象的引用,而不是创建了一个新的对象,而深拷贝创建了一个全新的对象。在实际开发中,根据需求选择合适的拷贝方式非常重要。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复