ZKX's LAB

数组克隆 数组元素非引用类型 为什么java里可以支持两个数组相互复制,而c++不能用数组给另一个数组赋值。

2020-07-23知识10

什么是深拷贝和浅拷贝以及如何实现深拷贝? 简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果A没变,那就是深拷贝,自食其力。此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝。我们来举个浅拷贝例子:let a=[0,1,2,3,4],b=a;console.log(a=b);a[0]=1;console.log(a,b);嗯?明明b复制了a,为啥修改数组a,数组b也跟着变了,这里我不禁陷入了沉思。那么这里,就得引入基本数据类型与引用数据类型的概念了。面试常问,基本数据类型有哪些,number,string,boolean,null,undefined五类。引用数据类型(Object类)有Object,Array,Date等。而这两类数据存储分别是这样的:a.基本类型-名值存储在栈内存中,例如let a=1;当你b=a复制时,栈内存会新开辟一个内存,例如这样:所以当你此时修改a=2,对b并不会造成影响,因为此时的b已自食其力,翅膀硬了,不受a的影响了。当然,let a=1,b=a;虽然b不受a影响,但这也算不上深拷贝,因为深拷贝本身只针对较为复杂的object类型数据。b.引用数据类型-名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值,我们以上面浅拷贝的。两个JAVA题目请教下各位 继承;应用程序,小应用程序applet;写源程序,编译,运行;小,大;private;0;父类中的成员,当前类中的成员;常见的java异常有哪些?都是什么意思? 1、ArithmeticException-算术运算中,被0除或模除。2、ArrayIndexOutOfBoundsException-数组越界访问。3、ArrayStoreException-数据存储异常,写数组操作时,对象或数据类型不兼容。4、ClassCastException-类型转换异常。5、IllegalArgumentException-方法的参数无效。6、IllegalThreadStateException-试图非法改变线程状态,比方说试图启动一已经运行的线程。7、NullPointerException-试图访问一空对象的变量、方法或空数组的元素8、NumberFormatException-数据格式异常,试图把一字符串非法转换成数值(或相反)。9、SecurityException-如果Applet试图执行一被WWW浏览器安全设置所禁止的操作。10、IncompatibleClassChangeException-如改变了某一类定义,却没有重新编译其他引用了这个类的对象。如某一成员变量的声明被从静态改变为非静态,但其他引用了这个变量的类却没有重新编译,或者相反。11、OutOfMemoryException-内存不足,通常发生于创建对象之时。12、NoClassDefFoundException-JAVA运行时系统找不到所引用的类。13、IncompatibleTypeException-试图实例化一个接口,Java运行时系统将抛出这个异常。14、UnsatisfiedLinkException-如果所需调用的方法是C。C#里的引用类型变量是什么意思,能不能通俗一点解释,是不是类似于C语言里面的结构体数组里的变量啊? 引用类型是相对于值类型说的值类型传递时,复制出一个新副本出来引用类型不会复制出新副本,相当于指针,传递的是对象指针,对象的内存首地址,而不是整个对象。我的理解就是,类都是引用类型,结构体和int/uint/byte这些都是值类型int a=10;test(a);值传递 相当于 int b=a;也就是 int b=10;object obj=new object();test2(obj);引用传递void test(int b){}void test2(object obj){} 那些类对象有个方法名叫 Clone 也就是克隆,也就是因为=号只是引用传递,所以无法复制出一份副本出来,所以才需要和弄出了这个克隆函数,才能通过此方法复制出副本出来

#对象数组#引用类型#object

随机阅读

qrcode
访问手机版