《Java 100 天进阶之路》第8篇:Java基本数据类型
第8篇:Java基本数据类型
📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第7篇:Java面向对象简介 |
➡️ 下一篇:第9篇:Java运算符简介
一、核心知识点
- 8大基本类型:
byte、short、int、long、float、double、char、boolean - 占用内存大小、取值范围、默认值
- 字面量表示(
L、F、进制、\u转义) - 类型转换:自动类型转换(隐式)、强制类型转换(显式)
- 包装类对应关系(自动装箱拆箱铺垫)
二、通俗讲解(1分钟开心学)
1. Java为什么需要基本类型?
Java有两大家族:基本类型 和 引用类型(类、接口、数组)。基本类型直接存储值,效率高;引用类型存储对象地址。8种基本类型是Java内置的、不可再分的简单数据类型。
2. 整数家族
| 类型 | 字节数 | 范围 | 默认值 | 字面量示例 |
|---|---|---|---|---|
byte |
1 | -128 ~ 127 | 0 | byte b = 100; |
short |
2 | -32768 ~ 32767 | 0 | short s = 30000; |
int |
4 | ±21亿 | 0 | int i = 1000000; (最常用) |
long |
8 | 很大很大 | 0L | long l = 10000000000L; (必须加L) |
💡 为什么
long字面量要加L?因为整数默认是int,超出int范围会报错。
3. 小数家族(浮点类型)
| 类型 | 字节数 | 精度 | 默认值 | 字面量示例 |
|---|---|---|---|---|
float |
4 | 单精度(约6-7位有效数字) | 0.0f | float f = 3.14f; (必须加f) |
double |
8 | 双精度(约15位有效数字) | 0.0 | double d = 3.14; (默认) |
💡 为什么
float字面量要加f?因为小数默认是double,赋值给float需要明确。
4. 字符和布尔
char:2字节,Unicode字符,范围0~65535。字面量用单引号:char c = 'A';或char c = 65;或char c = '\u4e2d';(中)boolean:只有true和false,默认false。不能与整数互转(不像C语言)。
5. 默认值注意:只有类的成员变量才有默认值,局部变量必须手动初始化否则编译错误。
6. 类型转换
- 自动转换(隐式):小范围 → 大范围,例如
int->long->double。char->int也自动转。 - 强制转换(显式):大范围 → 小范围,可能溢出或精度丢失。例如
(int)3.9得到3,(byte)128得到-128。
生活类比:
自动转换就像把小杯子里的水倒进大桶,安全。强制转换就像把大桶的水倒进小杯子,可能会溢出来(数据丢失)。
三、实操代码案例 + 场景说明
场景:计算奖金的总额,注意不同类型之间的运算。
public class DataTypeDemo {
public static void main(String[] args) {
int salary = 8000;
long bonus = 2000L;
// 自动转换:int + long = long
long total = salary + bonus;
System.out.println(total);
// 浮点数
double pi = 3.14;
float radius = 2.5f; // 必须加f
double area = pi * radius * radius;
System.out.println(area);
// 强制转换
int intArea = (int) area; // 截断小数,不是四舍五入
System.out.println(intArea);
// char 与 int
char ch = 'A';
int code = ch; // 自动转换:65
System.out.println(code);
}
}
默认值示例(成员变量才有默认值):
class TestDefault {
int a; // 0
double d; // 0.0
boolean flag; // false
char c; // '\u0000'(空字符)
// 局部变量必须初始化
public void method() {
int x; // 编译错误: Variable 'x' might not have been initialized
// System.out.println(x);
}
}
四、避坑要点
| 错误/误区 | 后果 | 正确做法 |
|---|---|---|
long字面量忘记L,数值超出int范围 |
编译错误:integer number too large |
大数值后加L或l |
float字面量忘记f |
编译错误:不兼容的类型 | 加f或F |
char与int混用误判 |
例如if (ch == 65)可能无意匹配'A' |
明确意图,必要时加注释 |
| 强制转换导致数据丢失 | 程序逻辑错误(如金额截断) | 先判断范围或使用BigDecimal |
| 浮点数直接比较相等 | 0.1+0.2 != 0.3 |
使用误差范围或BigDecimal |
五、面试高频考点
Q1:基本类型和包装类的区别?
基本类型直接存储值,效率高,不能用于泛型;包装类是引用类型,可以存储
null,提供方法,用于集合。自动装箱拆箱在两者间转换。
Q2:short s = 1; s = s + 1; 为什么报错?
1是int,s + 1结果是int,赋值给short需要强制转换。改为s += 1可以,因为+=有隐式转换。
Q3:char能存储一个汉字吗?
可以。Java使用Unicode编码,
char占2个字节,可以存储基本多文种平面(BMP)中的汉字,如'中'。生僻字可能需要两个char(代理对)。
六、练习题
- 简答:写出Java中8种基本类型的字节长度和默认值。
- 代码结果:
double d = 1.0 - 0.9; System.out.println(d);输出什么?为什么? - 动手:写一个程序,将
double类型金额123.456转换为int分(乘以100再转换),观察结果是否符合预期,并解释。
📊 你的学习进度
- 当前:第8篇 / 共44篇 · 第二阶段:核心语法与面向对象(第5~20篇)
- ✅ 已完成:第1~7篇
- 📖 正在学:第8篇
- ⏳ 待学习:第9~44篇
👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇
💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!
👉 下一篇预告
《Java运算符简介》
内容简介:算术、赋值、比较、逻辑、位、三元运算符全解析,短路与非短路区别,优先级记忆口诀。
💡 学完这篇,你将能写出更简洁高效的表达式,面试不再怕“a+=a++”这类题。
📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!
更多推荐



所有评论(0)