(一)
整数在内存中是怎么表示的?
- 补码表示。
- 为什么要用补码表示?有什么好处?
浮点数在内存中是怎么表示的?
- 相当于科学计数法的做法。
- 浮点数表示数的范围特别大,但精度有限
(二)
是“整数在内存中是怎么表示的”更加底层的概念
**假设:**一个整数有4个字节,内存中分4个字节大小的块
问:
- 高位放在高地址还是高位放在地地址?(衍生出2中不同的顺序) Big-ending/Little-ending
- 什么是对齐?
- 数据在内存中需要对齐
比如说:C++有一个结构体,里面有个char类型(1Byte),还有一个int类型(4Byte),问这个结构体是不是5Byte?
- 不是,5Byte在内存里放着不舒服,
- 把int类型对齐,
- 很有可能char类型后面会补上3个Byte,一共就8Byte(放一个整数和char)
(三)
注意:通过结构化说明
Java
- 先说Primitive type和object
- 再说Primitive type有些什么(不一定要说全)?
- 再说object
C++
- 系统自己的类型
- 自定义类型(class,联合(Union),struct)
Python(动态类型的语言)
- 基本数据类型
- Tuple(元组)
- List(列表)
- Dictionary(字典)…
详情请点击这里
(四)
- Primitive type之间:值传递
- Object:全是引用传递
- C++可以控制:想值传递or引用传递(自己说了算)
(五)
- 前面有讲
(六)
创建了2个对象
- “test”:创建一个String
- New String():创建一个String
解释New String(“test”):
- New String()创建了一个String,参数是“test”创建的String
解释String s = new String(“test”):
- Java都是引用传递
- s是个String类型的引用,指向等号右边New String()
- =:不产生新的对象
思考:在C++里也这样写一句话,是创建多少个对象?
(七)
- hashCode相等是equals相等的必要条件
- hashCode相等不一定是equals相等
- equals相等,hashCode一定相等
(八)
- 对象平时是在内存中,有时候想把它存在硬盘里,或者当做字节流通过网络发给对方——序列化(把内存中的东西斩成字节流)
- 反序列化:读到/收到一个字节流之后,把原来的对象还原出来放进内存里
序列化和反序列化通过什么来做的? - 实现Serializable接口(启用其序列化功能的接口)
- 实用性不大
通常:
- 序列化不会序列化到一个硬盘上,一般是写成数据库的形式。
- 不用Serializable接口
- 直接用Hibernate核心思想—ORM机制 进行 数据库序列化
如果通过网络,也不是传一个字节流,会把它序列化成一个JSON对象传到网络上,反序列化从JSON文档去反序列化成一个内存中的对象。(这些做法都有相应的库)
问:如何设计
- 数怎么进行序列化
- 怎样把一个内存中复杂的结构转化成字节流,或者转化成字符串,让他们反过来能把对象构造出来
欢迎各路大佬们开启头脑风暴,探讨本文提出的问题~❤