概念区分
首先,深拷贝和浅拷贝主要关注的是如何处理对象内部的引用关系,而按值传递和按引用传递主要关注的是如何处理方法参数的传递方式。
深拷贝和浅拷贝
浅拷贝
在浅拷贝中,对基本数据类型进行值传递,而对引用类型则进行引用传递。这意味着对于引用类型的对象,浅拷贝只是复制了对象的引用,而不是对象本身。因此,对拷贝后的对象所做的任何修改都会影响到原始对象。
深拷贝
与浅拷贝不同,深拷贝在复制对象时会创建一个新的对象,并复制原始对象的所有内容。这意味着对拷贝后的对象所做的任何修改都不会影响到原始对象,因为它们是完全独立的实体。
按值传递(pass by value)和引用传递(pass by reference)
在大多数高级语言中,基本数据类型(如数字、字符串、布尔值等)是通过值传递的,这意味着当你将一个变量传递给一个函数时,实际上是将该变量的值复制了一份给函数。此时传递的是真实内容的一个副本,对副本的操作不影响原内容。也就是说,形参怎么变化,不会影响实参对应的内容。而对象和数组是通过引用传递(pass by reference)的,这意味着当你将一个对象或数组传递给一个函数时,实际上是将对该对象的引用传递给了函数,因此在函数内部对对象或数组的修改会影响到原始对象或数组。
按值传递
在按值传递中,函数接收的是实参的副本,对副本的任何修改都不会影响到实参本身。这是因为实参和形参在内存中分别占用不同的空间。
按引用传递
与按值传递不同,按引用传递将实参的地址传递给函数。这意味着函数接收的是实参的引用,对引用的任何修改都会直接影响到实参本身。在按引用传递中,实参和形参共享同一块内存地址
ps. 不喜勿喷,欢迎指正