1、java中深浅拷贝的区别?
-
浅拷贝:只对基本数据类型进行拷贝,对于引用数据类型只是进行了引用的传递,没有真实的创建一个新的对象,则是浅拷贝;(参数引用传递中的改变源对象情况)

-
深拷贝:在对引用数据类型拷贝过程中,创建了一个新的对象,并且复制了对象内的所有成员变量,则是深拷贝(参数引用传递中的不改变源对象情况)

1.1 java浅拷贝的实现?
Cloneable 接口,并覆写 clone() 方法,clone()方法实现的是对当前对象进行拷贝。
1.2 java深拷贝的实现
- Cloneable 接口,并覆写 clone() 方法
需要拿到拷贝自己后产生的新的对象,然后对新的对象的引用类型再调用拷贝操作,实现对引用类型成员变量的深拷贝。
实现两次clone,第一次得到当前对象浅拷贝,然后再对新的对象引用类型调用拷贝实现深拷贝 - 序列化对象,再反序列化回来,然后就可以得到一个新的对象,
1.3 什么是序列化?(serialization涉及到IO部分)
将对象写入到io流中,反序列化是从io流中恢复对象;
2、java方法中的参数传递?(都是传递副本,值传递,java中没有引用传递)
问:当一个对象当作参数传递到一个方法之后,此方法可以改变对象属性,并且可以返回变化后的对象,那么这里是值传递还是对象传递。。
答:java中只有值传递参数
- 如果参数类型是基本数据类型,值传递,改变副本的值不会改变原始数据的值;
- 如果参数类型是引用数据类型,传过来的是对象地址副本,如果方法中没有改变地址的值,方法内针对对象的改变会影响到传入的参数;(浅拷贝)
- 如果参数类型是引用数据类型,函数中改变了副本的地址,比如new一个,也就是副本指向一个新的地址,此时方法中针对对象的改变不会影响到传入参数对象;(深拷贝)