ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在 Java 中,数据类型主要分为两大类:**基本数据类型(Primitive Types)** 和 **引用数据类型(Reference Types)**。 Java 8 虽然没有增加新的“基本数据类型”,但它引入了许多极具影响力的**新引用类型**(如 `Stream`、`Optional` 和新的日期 API),彻底改变了 Java 的开发模式。 * * * ### 1\. 基本数据类型 (8 种) 基本数据类型直接存储数值,性能最高,存储在栈(Stack)中。 | **分类** | **类型** | **大小** | **默认值** | **作用与应用场景** | | --- | --- | --- | --- | --- | | **整数型** | `byte` | 8-bit | `0` | 逐字节处理数据(如文件流、网络传输),节省空间。 | | | `short` | 16-bit | `0` | 较少使用,可用于大型数组节省内存。 | | | **`int`** | 32-bit | `0` | **最常用的整数类型**,用于计数、控制循环、索引。 | | | `long` | 64-bit | `0L` | 用于需要极大范围的数值(如 ID、时间戳、人口数)。 | | **浮点型** | `float` | 32-bit | `0.0f` | 单精度浮点数,用于对精度要求不高的科学计算。 | | | **`double`** | 64-bit | `0.0d` | **浮点数默认类型**,精度比 float 高,常用于一般计算。 | | **字符型** | `char` | 16-bit | `\u0000` | 存储单个 Unicode 字符(如 `'A'`, `'中'`)。 | | **布尔型** | `boolean` | 1-bit\* | `false` | 逻辑判断,仅有 `true` 和 `false` 两个值。 | * * * ### 2\. Java 8 新增及常用引用类型 引用类型存储的是对象的地址(指针),数据存储在堆(Heap)中。 | **分类** | **类型** | **作用与 Java 8 核心变化** | | --- | --- | --- | | **基础引用** | `String` | 存储字符串。Java 8 内部通过 `char[]` 实现(Java 9+ 改为 `byte[]`)。 | | | **`Optional<T>`** | **Java 8 新增:** 用于解决 `NullPointerException`。显式表示值可能为空。 | | **集合框架** | `List` / `Set` | `List` 有序可重复;`Set` 无序不可重复。Java 8 增加了 `forEach` 方法。 | | | `Map` | 存储键值对(Key-Value)。Java 8 增加了 `getOrDefault`、`compute` 等。 | | **函数式接口** | `Predicate<T>` | **Java 8 新增:** 接收一个参数,返回 `boolean`(用于过滤 `filter`)。 | | | `Function<T, R>` | **Java 8 新增:** 接收 T 返回 R(用于转换 `map`)。 | | | `Consumer<T>` | **Java 8 新增:** 接收 T 不返回结果(用于消费 `forEach`)。 | | **流式处理** | **`Stream<T>`** | **Java 8 新增:** 用于对集合进行声明式、高性能的流水线操作。 | | **新日期时间** | `LocalDate` | **Java 8 新增:** 代替旧的 `Date`,只处理日期(年-月-日),线程安全。 | | | `LocalDateTime` | **Java 8 新增:** 处理日期+时间,是目前处理时间的最推荐类型。 | * * * ### 💡 核心对比:基本类型 vs 引用类型 | **特性** | **基本数据类型 (Primitive)** | **引用数据类型 (Reference)** | | --- | --- | --- | | **存储内容** | 实际的数值 | 对象的内存地址(引用) | | **存储位置** | 栈 (Stack) | 堆 (Heap) | | **默认值** | 有默认值 (如 0, false) | 默认值为 `null` | | **判等方式** | 使用 `==` 比较值 | 使用 `.equals()` 比较内容 | | **包装类** | 无 (但有对应的 Integer, Double) | 本身就是类 | ### 下一步建议 由于你正在学习 Java 8 优化,了解 **`Optional<T>`** 的用法非常重要,它可以帮你写出完全没有 `if (obj != null)` 这种空指针判断的代码。你想看看如何用 `Optional` 优化你之前的账单查询代码吗?