基本数据类型
整数类型(4种)
| 类型 | 占用字节 | 取值范围 | 默认值 | 使用场景 |
|---|---|---|---|---|
| byte | 1字节 | -128 ~ 127 | 0 | 节省内存,处理文件流或网络传输 |
| short | 2字节 | -32768 ~ 32767 | 0 | 较少用,二进制文件操作时偶尔用 |
| int | 4字节 | 约-21亿 ~ 21亿 | 0 | 最常用的整数,默认整数类型 |
| long | 8字节 | -2⁶³ ~ 2⁶³-1 | 0L | 数值范围超过int时使用,赋值时末尾加L |
浮点类型(2种)
| 类型 | 占用字节 | 取值范围 | 默认值 | 注意事项 |
|---|---|---|---|---|
| float | 4字节 | 约 ±3.4e-38 ~ ±3.4e38 | 0.0f | 赋值时末尾加f,精度约6-7位小数 |
| double | 8字节 | 约 ±4.9e-324 ~ ±1.8e308 | 0.0d | 默认浮点类型,精度约15-16位小数,金融计算慎用 |
字符类型(1种)
| 类型 | 占用字节 | 取值范围 | 默认值 | 说明 |
|---|---|---|---|---|
| char | 2字节 | 0 ~ 65535(Unicode字符) | '\u0000' | 用单引号表示,如 'A',本质上是一个无符号整数 |
布尔类型(1种)
| 类型 | 占用字节 | 取值范围 | 默认值 | 说明 |
|---|---|---|---|---|
| boolean | 1位(1/8字节) | true / false | false | 只表示逻辑值,不能与整数互转(与C/C++不同) |
接口和抽象类的区别
- 关键字不同(abstract,interface)
- 抽象类可以包含非抽象方法,接口中全是抽象方法
- 具体化方法不同:接口通过实现类,抽象类通过继承
- 抽象类单继承,接口多实现
- 设计目的不同:抽象类是代码复用,接口是行为规范
设计层面的本质区别
- 抽象类是“从下往上”的复用,接口是“从上往下”的约束
- 抽象类描述“是什么”,接口描述“能做什么”
接口能替代抽象类吗?
不能。 根本原因:
- 接口不能有实例变量(无法保存对象状态)
- 接口的 default 方法如果有冲突(多继承的菱形问题),需要子类手动解决
- 抽象类可以控制访问权限(protected 给子类用,接口所有方法默认 public)
逻辑运算符
- 与
&&:短路与,性能更高,表达式一旦出现false就直接返回,不再计算之后表达式&:计算所有表达式得到结果,结果和短路与一致
- 或
||:短路或,性能更高,表达式一旦出现true就直接返回,不再计算之后表达式|:计算所有表达式得到结果,结果和短路或一致
- 非
!:取反
位运算符
都是数值运算,转为二进制后按位补齐,再进行计算
&:按位与,都为1记为1,否则记为0|:按位或,有一个为1记为1,否则记为0^:按位异或,相同记为1,不同记为0<<:乘2的N次方>>:除2的N次方