JAVA深拷贝与浅拷贝(呕心沥血之作)

JAVA深拷贝与浅拷贝

  • ①对于Java拷贝的理解
  • ②浅拷贝
    • 一、图解
    • 二、代码举例
    • 三、适用情况
  • ③深拷贝
    • 一、图解
    • 二、代码举例
    • 三、适用情况

①对于Java拷贝的理解

  在JAVA语言中,我们常常会需要用到拷贝操作,当我们需要用到拷贝一个JAVA对象的时候,JAVA中常见的有四种拷贝方式
  一、使用stream(这是java中传统的文件复制方式。这里创建两个文件 - source和destination。然后从source创建InputStream并使用OutputStream将它写入destination文件以进行复制文件操作。)
   二、使用java.nio.channels.FileChannel类(FileChannel类可用于复制文件。它的transferFrom()方法就可以完成,这种复制文件的方式应该比Stream复制文件更快。)
  三、使用FileUtils(可通过使用Apache Commons IO中的FileUtils.copyFile(File srcFile,File destFile)可用于复制文件。如果已经在项目中使用Apache Commons IO,那么使用它来简化代码是比较容易的。在内部它使用Java NIO FileChannel,因此如果尚未将它用于其他功能,则可以避免使用此包方法。)
  四、使用Files类(如果使用Java 7或更高版本,则可以使用Files类的copy()方法复制文件。它使用文件系统提供程序来复制文件。)
  这四种拷贝方式是JAVA学习者应该知道的拷贝方式,但今天的博客我们不深入研究这四种拷贝方式,而是从另一个角度去学习拷贝,即深拷贝与浅拷贝。那什么是深拷贝? 什么是浅拷贝呢? 二者的区别有是什么呢?
  虽然二者的作用都是对对象进行拷贝,但浅拷贝只是拷贝了源对象的地址,所以源对象的任何值发生改变时,拷贝对象的值也会随之而发生变化。 但深拷贝则是拷贝了源对象的所有值而不是地址,所以即使源对象的值发生任何变化时,拷贝对象的值也不会改变。

②浅拷贝

一、图解

JAVA深拷贝与浅拷贝(呕心沥血之作)_第1张图片
  从图中我们可以看出浅拷贝当中,无论是被拷贝的对象还是拷贝对象,他们都有一个共同点都指向同一个对象地址,因为这个地址是唯一的,所以其地址中的内容也是唯一的,所以拷贝对象和被拷贝对象的内容才会相同, 因此我们可以得出结论,浅拷贝其实拷贝的是对象的地址,所以当两个对象中的任意一个的属性改变时, 另一者也会随之改变, 下面请看代码举例。

二、代码举例

public class test {
   
    public static void main(String[] args) {
   
        wei_er w1 = new wei_er();
        w1.setName("伟儿");
        w1.setHobby("奖励");
        w2 = w1;
        System.out.println("w1地址:"+w1);
        System.out.println("w2地址:"+w2);
        System.out.println("w1姓名:"+w1.getName()+" "+"w1爱好:"+w1.getHobby());
        System.out.println("w1姓名:"

你可能感兴趣的:(JAVA,java,intellij-idea,软件工程)