Java教程

深拷贝与浅拷贝

本文主要是介绍深拷贝与浅拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

拷贝不要用于对象

浅拷贝:拷贝的是内存地址,不管修改拷贝前或者拷贝后,两者都会改变。

深拷贝:新创建一个对象,使用循环,把拷贝前的每一项拷贝给新对象,不管修改拷贝前或者拷贝后,两者都不会受影响。

// 基本类型:String Number Boolean null undefined symbol
// 引用类型: Object(Array function(但函数不可用) Data)  
// 深拷贝和浅拷贝适用于引用类型
// 基本类型是存储在栈内存中,引用类型是存储在堆内存中(栈内存中存储的是堆内存中的引用地址)
//浅拷贝 引用类型拷贝的内存地址,只拷贝是一层,
let a = [1, 2, 3]
let b = a;
a[0] = 4;
console.log(b);
// 深拷贝 拷贝所有 深拷贝是新创建一个对象 把需要拷贝的对象中的每一项 拷贝一份 给新对象
 var obj = {
    name: "rql"
}
var obj2 = {};
for (let i in obj) {
    obj2[i] = obj[i];
}
obj.name = "rqy";
console.log(obj);
console.log(obj2);
console.log(obj2.name);

// json格式也是对象
var p = {
    "id": "007",
    "name": "刘德华",
    "books": new Array('三国演义', '水浒传', '西游记')
}
var p2 = {}
for (var key in p) {
    if (typeof p[key] == 'object') { //判断是否是引用类型
         p2[key] = []; //创建一个新数组,来存储拷贝的数据
         for (var i in p[key]) {
             p2[key][i] = p[key][i];
         }
     } else {
         p2[key] = p[key]
         }
     }
p.id = "008";
p2.books[0] = "四国";
console.log(p);
console.log(p2);

 

这篇关于深拷贝与浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!