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

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

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

深拷贝:赋值时值完全复制,完全的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。

转载于:https://www.cnblogs.com/sherlockwhite/p/11327779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值