Java的浅拷贝与深拷贝
简介:本文通过代码,让大家能够快速的理解,Java中的浅拷贝与深拷贝。
概述
浅拷贝,深拷贝的定义与区别
- 浅拷贝创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。
- 如果属性是基本类型,拷贝的就是基本类型的值
- 如果属性是引用类型,拷贝的就是内存地址 。
- 深拷贝
*将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象。 - 区别
浅拷贝基本类型之前互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象;深拷贝改变新对象不会影响原对象,他们之前互不影响。
代码理解
浅拷贝
class Student{ public String name; } public class Main { public static void main(String[] args) { /* * 浅拷贝例子, 存的是地址内容, 然后一个变化另一个也会变化 * */ Student st1 = new Student(); st1.name = "hhh"; System.out.println(st1.name); // hhh Student st2 = st1; System.out.println(st2.name); // hhh st2.name = "xxx"; System.out.println(st1.name); // xxx st2.name = "lalala"; System.out.println(st1.name); // lalala } }
运行结果:
深拷贝
class Student{ public String name; public Student(){ } public Student(Student student){ this.name = student.name; } } public class Main { public static void main(String[] args) { /* * 深拷贝例子, 开辟一块新的空间,然后存放另一个对象的内容 * */ Student st1 = new Student(); st1.name = "hhh"; System.out.println(st1.name); // hhh Student st2 = new Student(st1); System.out.println(st2.name); // hhh st1.name = "xxx"; // 修改st1之后 System.out.println(st2.name); // hhh 这个st2中的内容依旧没有发生改变 这个就是深拷贝 } }
运行结果: