面试问题整理
本人主要记录2024年秋招、春招过程中的疑难八股真题,参考来源:牛客网、知乎等。
八股
- 深拷贝与浅拷贝
- 浅拷贝: 浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
- 深拷贝: 深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
https://blog.51cto.com/u_16099325/7762799
链接中有深拷贝与浅拷贝的实现代码:
map实现深拷贝与浅拷贝:
####################浅拷贝##################### Map<String,String> map = new HashMap<>(); Map<String,String> map1 = map; map.put("a","A"); System.out.println(map); System.out.println(map1); // map1复制的是对象map的引用,map1和map指向的是同一个对象。这里我们可以通过System.identityHashCode(Object obj)来返回对象内存地址转化后的hashcode,之所以用不直接用map.hashCode(),是因为HashMap的实现类重写了hashCode方法,返回的值不子再是对象内存地址转化的hashcode了。 ####################深拷贝##################### Map<String,String> map = new HashMap<>(); Map<String,String> map1 = new HashMap<>(); map.put("a","A"); map1.putAll(map); System.out.println(map); System.out.println(map1); System.out.println(System.identityHashCode(map)); System.out.println(