CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Java 核心深化/课时/类型与变量
RawBlame
课时目录12 节

Java 核心深化

  1. 01Java 核心地图
  2. 02类型与变量
  3. 03控制流
  4. 04类与对象
  5. 05抽象与接口
  6. 06集合框架
  7. 07Lambda 与 Stream
  8. 08并发基础
  9. 09I/O 与 NIO
  10. 10构建工具
  11. 11测试与 JUnit
  12. 12综合练习

类型与变量

data-types、variables、type-casting。

30 分钟

类型与变量

java-data-types 与 java-variables 已引入基本类型——本课聚焦 引用 vs 值、装箱拆箱、类型转换与 var,减少「能编译但语义错」的代码。

学习目标

  • 区分基本类型与引用类型的内存语义
  • 安全使用自动装箱、拆箱与 null
  • 掌握 widening / narrowing 与 instanceof 模式匹配

基本类型 vs 引用类型

基本类型引用类型
存储栈上值(局部变量)栈上引用 → 堆上对象
默认数值 0、boolean falsenull
比较== 比数值== 比引用;内容用 equals
int count = 0;
String slug = "java-core-essentials"; // 引用指向字符串池或堆对象
Integer boxed = 42;                 // 自动装箱
int unboxed = boxed;                // 自动拆箱,boxed 为 null 时 NPE

习惯:集合与泛型用包装类型或对象;算术热点路径可用 int 避免装箱开销。

类型转换

long millis = 1_500L;
int order = (int) millis; // narrowing,可能丢失精度

Object obj = "hello";
if (obj instanceof String s) { // JDK 16+ 模式匹配
    System.out.println(s.toUpperCase());
}
  • widening(小→大)隐式安全:int → long
  • narrowing(大→小)需显式 cast
  • 引用向下转型前用 instanceof 校验

var 局部变量

var lessons = new ArrayList<Lesson>(); // 推断为 ArrayList<Lesson>
var slug = "jvc-types";                // 推断为 String
// var x = null;                       // 编译错误:无法推断

var 只用于 局部变量 且 必须有初始化;API 签名仍写显式类型。

与进阶课的关系

java-advanced-essentials 会讲 record、sealed class 等 新型引用类型;本课先把 经典类型系统 吃透。

练习

  • 写一段代码演示 Integer 为 null 时拆箱的 NPE,并用 Objects.requireNonNull 规避
  • 用 instanceof String s 处理 Object 参数
  • 对比 double d = 1.9; int i = (int) d; 的结果并解释
  • 小结

    基本类型存值,引用类型存地址;装箱注意 null,转型先 instanceof。 下一课控制流与程序生命周期。

    加载本节练习…
    ← 上一课Java 核心地图下一课 →控制流