基本数据类型及引用数据类型、浅拷贝及深拷贝


浅拷贝及深拷贝、基本数据类型及引用数据类型

先简单描述下深拷贝和浅拷贝的概念。

深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个

浅拷贝:赋值时,引用赋值,相当于取了一个别名。对其中一个修改,会影响另一个
基本类型是储存在栈内存空间,引用类型是储存在堆内存空间。(我私以为和线性表和非线性表有关,这里只是做下记录。)

$a = 1; //基本数据类型
$b = $a;
$b = 2;
print($a,$b); // 1,2

在PHP中数组赋值也是深拷贝,但是在Java中数组就是浅拷贝。

$a = array(1,2,3,4,5);
$b = $a;
$b[2] = 100;
var_dump($a,$b); //[1,2,3,4,5]  [1,2,100,4,5]
public class Main {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        int[] b = a;
        b[2] = 100;
        System.out.println(Arrays.toString(a)); // [1, 2, 100, 4, 5]
    }
}

而实例化的对象在=赋值中都是浅拷贝

class A{
    public $num = 1;   
}
$a = new A;
$b = $a;
$b->num = 100;
print($a->num); // 100

在PHP中提供了深拷贝的方法clone。

class A{
    public $num = 1;   
}
$a = new A;
$b = clone($a);
$b->num = 100;
print($a->num); //1

同样的深拷贝方法还有转成json字符串,json_encode(),json_decode();
或者使用序列化函数serialize和unserialzie。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM