20.深拷贝和浅拷贝的区别是什么?
样PS知5lăĀŵ ÂNҊ. Ì $« ' 7҉知
equals()· l<ȴJ% hashCode()̭ · Ҋ Fequals()<º ǻ<(Ƒ ѽ
hashCode()· l<ȴJ% equals() · Ҋ hashCode() ǻ<(Ƒ ѽ ɧƞ
1.ɶPɓɓ@:˄̻ ʦ˄ 知
E Âƚ equalsҊ ſˏÂƚ hashCode又
§ Set Șͧ Âǫ <ȴҊɆɍ hashCode ; equals Ó~ϘɚҊ 5 Set Șͧ <ȴſˏÂƚ luó又
kp ɼ<ȴ` Map ;Ҋ>"ſˏÂƚ hashCode ; equals又
String Âƚ hashCode ; equals uóҊ 5 %(5ƂĠχ?9ŇF String <ȴ keyŇF又
2然U"$«ĩ Âƚ友 ˑ 9u ĩ ÂÕhashCodeҊE©ɣĩ ¥ HashTable然HashMap然HashSethashĀΓ
ɞą$v ÂÕhashCodeѽ
3然>" U" ÂÕhashCodeû友 kp Âƚ equalsҊºk' ɪ <ȴ Ăķ X ҊjĻǧhashCode X ÆҊ>".( ȑl
<ȴ “· ”ҊjhashCodeċ dѽ
dҊ© FÅ ;ĻȘ hashMap然hasoTableŞhashSet Ҋ 5“· ”Ĝȗ ;ǭ,ƹĜJ% $«ҊɢɎ Ĝ ѽ
4然 U"equals()· ҊhashCode · ҊjhashCode· Ҋċ Īequals· ?
§ ʽĬhashCodeÖ-ĂȘȡҊ 5hashCodeſˏ· ѽ HashMap¬Ç <ȴ ºȾkeyhashCode· ;equalstrueѽ
i 5hashCode· Ҋċ(5equal Ҋ ºkObjectA;ObjectBJ% Ŏ¸nameҊ>"
hashCode 5namešűҊ 5hashCode dҊ´ l<ȴŎ ɣȨҊ 5equalsfalseѽ
5然 U"ĩ hashCode?
ø)hashCode(5.? ƹ -ĂȘȡѽ ø)hashCodeºȾºequalsuó?Ҋ©get$ƙºȾhashCodeҊkphashCode Ҋěďϛmfalseѽ̑
ď知https://blog.csdn.net/xlgen157387/article/details/88087963
20.Čʇƴ4Ȭʇƴ Ť I!?
ͫ现ɨ
ʊ1ʋʈ ƽ
yǫĴ<ȴ Æõ ˳ªì <ȴ· ǭҊj <ÅJ<ȴ ʙF͢]Ɨđì <
package com.test;
public class ShallowCopy { public static void main(String[] args) throws CloneNotSupportedException
{ Teacher teacher = new Teacher();
teacher.setName("riemann");
teacher.setAge(27);
Student2 student1 = new Student2();
student1.setName("edgar");
student1.setAge(18);
student1.setTeacher(teacher);
Student2 student2 = (Student2) student1.clone();
System.out.println("拷贝贝后");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println(student2.getTeacher().getName());
System.out.println(student2.getTeacher().getAge());
System.out.println("修改老老老师的信息后——————");
// 修改老老老师的信息 teacher.setName("Games");
System.out.println(student1.getTeacher().getName());
System.out.println(student2.getTeacher().getName());
} }
class Teacher implements Cloneable { private String name;
private int age;
public String getName() { return name;
}
public void setName(String name) { this.name = name;
}
public int getAge() { return age;
}
public void setAge(int age) {
private String name;
private int age;
private Teacher teacher;
public String getName() { return name;
}
public void setName(String name) { this.name = name;
}
public int getAge() { return age;
}
public void setAge(int age) { this.age = age;
}
public Teacher getTeacher() { return teacher;
}
public void setTeacher(Teacher teacher) { this.teacher = teacher;
}
public Object clone() throws CloneNotSupportedException { Object object = super.clone();
return object;
} }
̫7Āp:
拷贝贝后 edgar
18 riemann
27 修改老老老师的信息后——————
Games Games

ŕ现ɨ
ʊ1ʋʈ ƽ
ŕ现ɨ džLjǸ <ȴ现ɨҊŕ现ɨ 现ɨ Ŏ¸,Č现ɨŎ¸Ɨđ aDž2Ȓ ĂȘѽ©< ȴ;ı ʙF <ȴ 1现ɨ$ľ:*ŕ现ɨѽŕ现ɨ·º ͫ现ɨDŽîȾǮČɽÑˍȾ ѽ
ǰjǯiҊŕ现ɨ ǫĴ <ȴ ʙF <ȴ ǫĴ ʖѽ
ʊ2ʋʈČʇƴ Ƀ
package com.test;
public class DeepCopy { public static void main(String[] args) throws CloneNotSupportedException
{ Teacher2 teacher = new Teacher2();
teacher.setName("riemann");
teacher.setAge(27);
Student3 student1 = new Student3();
student1.setName("edgar");
student1.setAge(18);
student1.setTeacher(teacher);
Student3 student2 = (Student3) student1.clone();
System.out.println("拷贝贝后");
System.out.println(student2.getName());
System.out.println(student2.getAge());
System.out.println(student2.getTeacher().getName());
System.out.println(student1.getTeacher().getName());
System.out.println(student2.getTeacher().getName());
} }
class Teacher2 implements Cloneable { private String name;
private int age;
public String getName() { return name;
}
public void setName(String name) { this.name = name;
}
public int getAge() { return age;
}
public void setAge(int age) { this.age = age;
}
public Object clone() throws CloneNotSupportedException { return super.clone();
} }
class Student3 implements Cloneable { private String name;
private int age;
private Teacher2 teacher;
public String getName() { return name;
}
public void setName(String name) { this.name = name;
}
public int getAge() { return age;
}
return teacher;
}
public void setTeacher(Teacher2 teacher) { this.teacher = teacher;
}
public Object clone() throws CloneNotSupportedException { // 浅复制时:
// Object object = super.clone();
// return object;
// 改为深复制:
Student3 student = (Student3) super.clone();
// 本来是浅复制,现在将Teacher对象复制一一份并重新set进来 student.setTeacher((Teacher2) student.getTeacher().clone());
return student;
} }
̫7Āp知
拷贝贝后 edgar
18 riemann
27 修改老老老师的信息后——————
Games riemann
Āp2ί知 lʙFstudent1;student2Ɨđ l<ȴҊlʙFstudent1;student2 lteacherʙF
Ɨđ l<ȴҊ´<teacher<ȴ ȰƇE İʡstudent1<ȴ, 5' ŕ现ɨѽ
全站分卷索引 · 144 卷
- 1Java基础题
- 22.Java语言主要特性
- 35.如果main方法被声明为private会怎样?
- 48.Object有哪些公用方法
- 59.为什么Java里没有全局变量?
- 614.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
- 717.Locale类是什么?
- 820.深拷贝和浅拷贝的区别是什么?
- 921.Java 中操作字符串都有哪些类?它们之间有什么区别?
- 1025. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- 1127.Java 中Comparator 与Comparable 有什么不同?
- 12java集合
- 134.Collections.sort排序内部原理
- 149.说一下 HashSet 的实现原理?
- 1514.在 Queue 中 poll()和 remove()有什么区别?
- 1617.HashMap并发安全的问题
- 1718.JDK1.8与JDK1.7的性能对比
- 1818.HashMap操作注意事项以及优化?
- 19异常&反射
- 203.throw和throws的区别?
- 219.java反射机制的作用
- 22IO&NIO
- 231.什么是IO流?
- 244.读取数据量大的文件时,速度会很慢,如何选择流?
- 258.I/O多路复用模型(IO multiplexing)
- 2610.异步 I/O(asynchronous IO)
- 2712.NIO和IO适用场景
- 2815.Java NIO中最常用的通道实现?
- 2919.Selector是什么?
- 30多线程
- 316.线程RUNNABLE状态
- 3212.如何知道代码段被哪个线程调用?
- 3314.sleep()方法
- 3419.线程的优先级
- 3522.线程种类
- 3625.Java虚拟机退出时Daemon线程中的finally块一定会执行?
- 3728.什么是synchronized?
- 3836.锁的升降级规则
- 3941.轻量锁的解锁
- 4049.volatile关键字
- 4155.ThreadLocal
- 4258.Lock接口
- 4363.公平锁和非公平锁的区别
- 4467.Condition使用
- 4572.ConcurrentHashMap
- 4679.工作窃取算法的有缺点
- 4786.CyclicBarrier
- 4891.线程池工作流程
- 4993.向线程池提交任务
- 5096.Executor
- 5199.SingleThreadExecutor
- 52JVM
- 534.画一下jvm内存结构图?
- 548.Java堆
- 5517.如何实现一个堆内存溢出?
- 5622.Edem : from : to默认比例是?
- 5728.复制算法?
- 5829.标记-整理算法?
- 5930.分代收集算法?
- 6032.Stop The World?
- 6137.Parallel Old收集器?
- 6243.虚拟机进程状况工具?
- 6345.配置信息工具?
- 64Linux
- 658.迷路,我的当前位置在哪?
- 6612.删除文件?强制删除?递归删除?
- 6714.复制文件
- 6818.查看整个文件?按照有文本显示行号?无文本显示行号?
- 6921.查找匹配数据?反向搜?
- 7024.Linux广泛使用的归档数据方法?
- 7127.什么是环境变量?
- 7230.查看组信息?如何创建组?删除组?
- 7331.修改权限?
- 7436.查看设备还有多少磁盘空间?
- 7538.实时监测进程
- 7642.验证网络可链接命令是什么?什么原理?
- 7743.查看某端口是否被占用?
- 7845.如何查看当前主机名?如何修改?如何重启后生效?
- 7949.打印文件第一行到第三行?
- 80Mysql
- 813.MySql的存储引擎有哪些?
- 827.选择合适的数据类型
- 8313.MySql有哪些索引?
- 8415. 非聚簇索引一定会回表查询吗?
- 8521.什么是事务?
- 8626.死锁?
- 8731.like走索引吗?
- 8837.如何随机获取一条记录?
- 8942.sql语句的执行流程?
- 9045.MySql最多创建多少列索引?
- 9148.varchar(10)和int(10)代表什么含义
- 92Spring
- 934.Spring的优点?缺点?
- 948.IOC注入哪几种方式?
- 9512.Spring中的bean有几种scope?
- 9621.AOP动态代理策略?
- 9727.SpringMVC的优点?
- 9832.注入Java集合的标签?
- 9943.清空缓存是哪个注解?
- 10050.Spring事务传播行为有哪些?
- 1014.Mybatis优点?
- 10212.Mybatis动态sql?
- 10318.当实体属性名和表中字段不一致,怎么办?
- 10424.二级缓存如何配置?
- 105Nginx
- 1063.nginx 常用命令?
- 1078.如何精准匹配路径?
- 10814.负载均衡配置?
- 109Redis
- 1105.Redis和Memcache区别?
- 11111.Redis配置需要自己写?如何配置?
- 11217.字符串最大不能超过多少?
- 11325.AOF持久化?
- 11431.AOF优点?
- 11538.Redis过期键删除策略?
- 11641.Redis内存溢出控制?
- 11748.什么是缓存穿透?处理问题?
- 1182.为什么要使用Dubbo?
- 1196.说一下Dubbo服务注册流程?
- 1208.Dubbo架构的特点?
- 12112.配置优先级规则?
- 12213.如何用代码方式绕过注册中心点对点直连?
- 12315.如何禁用某个服务的启动检查?
- 12420.Dubbo有几种配置方式?
- 12525.一个服务有多重实现时,如何处理?
- 12632.自动剔除服务什么原理?
- 127SpringBoot
- 1287.SpringBoot启动方式?
- 12912.SpringBoot热部署方式?
- 13018.获得Bean装配报告信息访问哪个端点?
- 13125.不同的环境的配置文件?
- 13230.SpringBoot读取配置相关注解有?
- 1335.kafka的5个核心Api?
- 13415.kafka磁盘选用上?
- 13523.kafka压缩消息可能发生的地方?
- 1363.SpringCloud有哪些特征?
- 1377.Eureka是什么?
- 13812.什么是自我保护机制?
- 13919.断路器Hystrix的有哪些功能?
- 14028.Zuul的核心是?
- 14135.更多知识?
- 142二、基本信息(姓名/性别/毕业院校/电话/邮箱/居住地/期望地)
- 143四、工作期望&个人评价
- 144五、 是否有博客,个人技术栈点等