查看了公众号:java之间的整理的集和文章,文章地址

总结和搜索了一下网络知识,总结了一下:

1.String 的hashcode()方法

2.switch总结:

3.如何实现克隆

1.String 的hashcode()方法

String也是遵守equals的标准的,也就是 s.equals(s1)为true,则s.hashCode()==s1.hashCode()也为true。此处并不关注eqauls方法,而是讲解 hashCode()方法,String.hashCode()有点意思先来看一下代码:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}

为什么要选31作为乘数呢?
从网上的资料来看,一般有如下两个原因:
  • 31是一个不大不小的质数,是作为 hashCode 乘子的优选质数之一。另外一些相近的质数,比如37、41、43等等,也都是不错的选择。那么为啥偏偏选中了31呢?请看第二个原因。
  • 31可以被 JVM 优化,31 * i = (i << 5) - i。
链接:http://www.cnblogs.com/jinggod/p/8425182.html

2.switch总结:

  • 底层的switch只能处理4个基本类型的值。其他三种类型需要通过其他方式间接处理,即转成基本类型来处理。
  • 编译器对包装类的处理是通过 拆箱。
  • 对枚举类型的处理,是通过枚举常量的序号及一个数组。
  • 对字符串String的处理,是通过 String 的hash值。
3.常量池
常量 可分为 字面常量(也称为直接常量)和 符号常量。
字面常量: 是指在程序中无需预先定义就可使用的数字、字符、boolen值、字符串等。简单的说,就是确定值的本身。如 10,2L,2.3f,3.5,“hello”,'a',true、false、null 等等。
符号常量: 是指在程序中用标识符预先定义的,其值在程序中不可改变的量。如 final int a = 5;
常量池(静态常量池,运行时常量池)
常量池引入的 目的 是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。这是一种 享元模式 的实现。
  1. 字符串常量池属于运行时常量池
  2. 常量池分为:静态常量池(class文件常量池),运行时常量池
享元模式:http://www.runoob.com/design-pattern/flyweight-pattern.html

3.如何实现克隆

浅克隆:
1. 被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常), 该接口为标记接口(不含任何方法)
2. 覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象。(native为本地方法)
深克隆
1.可以通过覆盖Object类的clone()方法实现,
2.也可以通过序列化(Serialization)等方式来实现。
使用序列化实现java的深拷贝
 1 // deepClone()的方法实现
 2 Person person = new Person("sunjs",100);
 3 Person person1 =(Person) person.deepClone();
 4
 5 //序列化方式
 6 public class CloneUtils {
 7 // 拷贝一个对象
 8 @SuppressWarnings("unchecked")
 9 public static <T extends Serializable> T clone(T obj) {
10 // 拷贝产生的对象
11 T clonedObj = null;
12 try {
13 // 读取对象字节数据
14 ByteArrayOutputStream baos = new ByteArrayOutputStream();
15 ObjectOutputStream oos = new ObjectOutputStream(baos);
16 oos.writeObject(obj);
17 oos.close();
18 // 分配内存空间,写入原始对象,生成新对象
19 ByteArrayInputStream bais = new ByteArrayInputStream(
20 baos.toByteArray());
21 ObjectInputStream ois = new ObjectInputStream(bais);
22 // 返回新对象,并做类型转换
23 clonedObj = (T) ois.readObject();
24 ois.close();
25 } catch (Exception e) {
26 e.printStackTrace();
27 }
28 return clonedObj;
29 }
30 }

深拷贝参考链接:https://time.geekbang.org/column/intro/82

转载于:https://www.cnblogs.com/liguo-wang/p/10463863.html

2019Java查漏补缺(二)相关推荐

  1. 前端面试查漏补缺--(二) 垃圾回收机制

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  2. 前端面试查漏补缺--(一) 防抖和节流

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  3. 前端面试查漏补缺--(三) 跨域及常见解决办法

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  4. 前端面试查漏补缺--(十) 前端鉴权

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  5. C语言——基础查漏补缺(三):谭浩强红书刷题笔记大杂烩

    相关文章: C语言--基础查漏补缺(一):超长文帮你理清一些概念 C语言--基础查漏补缺(二):<C程序设计试题汇编>应试概念总结 C语言--基础查漏补缺(四):利用<挑战程序设计竞 ...

  6. 算法岗面经整理!查漏补缺

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:阿毛冲冲冲,来源:NewBeeNLP(牛客网) 写在前面 三月面试 ...

  7. 2019/5/12 查漏补缺

    目录 2019/5/12 查漏补缺 数据类型分为两大类:基本类型和引用类型: java中类的继承关系 关于接口 重载和重写 静态变量 java中的关键字和保留字 数据库操作 实现数据库收回部分权限的操 ...

  8. Android系统开发和性能优化——查漏补缺【建议收藏】

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  9. Java基础查漏补缺(2)

    Java基础查漏补缺(2) apache和spring都提供了BeanUtils的深度拷贝工具包 +=具有隐形的强制转换 object类的equals()方法容易抛出空指针异常 String a=nu ...

最新文章

  1. 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
  2. 福利丨机不可失!20G免费教材快来领!
  3. 揭秘ASP.NET 2.0的Eval方法(转)
  4. 14_面向对象API绘图、图中图 (A Plot inside of Another Plot)、设定绘图范围Setting the Plot Range、对数尺度Logarithmic Scale
  5. 重载和const形参
  6. 使用阿里云docker加速器
  7. 前端学习(1759):前端调试值之调试安卓设备的方法
  8. 线性筛法 欧拉筛c语言,[洛谷P3383][模板]线性筛素数-欧拉筛法
  9. 安装Win10,ERROR_0x8007025D问题解决
  10. 工作六年的前端开发在想什么
  11. html基础之弹性布局(dispaly :flex)
  12. wordpress本地网站怎么搬到服务器,如何把wordpress从本地服务器迁徙到网站主机上...
  13. 三思笔记专区,即将闪亮登场
  14. html设置表格列宽百 分比,WPS解决实现单页显示 高分辨率显示器百分之百比例下双页改单页方法...
  15. iOS开发app打包
  16. 众数和中位数的应用题_什么是众数和中位数
  17. ubuntu安装企业微信
  18. win7 两台PC网线直连创建家庭组局域网分享文件
  19. DDN周报 | 6月11日-6月15日
  20. CGAN条件对抗生成网络一瞥

热门文章

  1. 创建一个1000w个随机浮点数的数组
  2. 【转】Mysql索引最左匹配原则理解
  3. 解决:WebDriverException: 'chromedriver' executable needs to be in PATH
  4. meta几个常用的地方
  5. Linux之cp命令
  6. ArrayList如何实现增删元素及其缺陷
  7. 《Mahout算法解析与案例实战》一一2.3 测试安装
  8. JVM垃圾回收机制之引用类型
  9. jquer WdatePicker 使用 手册
  10. Maven中如何配置WAR依赖WAR和JAR的多模块项目结构