基本类型成员变量默认值为0、0.0、'\u0000'、false,包装类成员变量默认为null;局部变量均须显式初始化,否则编译报错或运行时npe。

Java 中基本类型和包装类的默认值是完全不同的,这是理解它们行为差异的关键点之一。
基本类型的默认值(仅适用于成员变量)
基本类型在类中作为成员变量声明时,编译器会自动赋予默认值;但作为局部变量时必须显式初始化,否则编译报错。
- byte、short、int、long:默认为 0
- float、double:默认为 0.0
- char:默认为 '\u0000'(空字符,不是空格)
- boolean:默认为 false
包装类的默认值(仅适用于成员变量)
包装类是引用类型,其成员变量默认值统一为 null,与所有其他对象一致。局部变量同样不会自动初始化。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- Integer、Long、Double、Boolean 等:默认为 null
- 例如:
Integer num;在类中声明后值为 null,不是 0 - 若用
num.intValue()会触发 NullPointerException
为什么默认值不同?本质区别在这里
基本类型是栈上的原始数据,JVM 规范直接规定了它们的默认初始值;而包装类是堆上的对象引用,遵循“引用类型默认为 null”的通用规则。
- 默认值机制只对类的成员变量生效,方法内的局部变量不适用
- 自动装箱(如
Integer i = 100;)不会改变默认值逻辑,它只是语法糖 - 使用前建议用
Objects.nonNull()或判空,避免 NPE
实用建议:如何安全处理默认值差异
开发中常因混淆默认值导致空指针或逻辑错误,推荐以下做法:
- 成员变量优先使用基本类型(如需默认数值语义),或明确初始化包装类:
Integer count = 0; - 接收外部数据(如 JSON、数据库字段)时,包装类更合适(可区分“未传值”和“值为 0”)
- 比较时避免直接用
==判断包装类是否为 0,应使用Objects.equals(a, b)或先判空再调用intValue()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










