第8篇:Java基本数据类型

📌 系列导航《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第7篇:Java面向对象简介 |
➡️ 下一篇:第9篇:Java运算符简介

一、核心知识点

  • 8大基本类型:byteshortintlongfloatdoublecharboolean
  • 占用内存大小、取值范围、默认值
  • 字面量表示(LF、进制、\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:只有truefalse,默认false。不能与整数互转(不像C语言)。

5. 默认值注意:只有类的成员变量才有默认值,局部变量必须手动初始化否则编译错误。

6. 类型转换

  • 自动转换(隐式):小范围 → 大范围,例如int -> long -> doublechar -> 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 大数值后加Ll
float字面量忘记f 编译错误:不兼容的类型 fF
charint混用误判 例如if (ch == 65)可能无意匹配'A' 明确意图,必要时加注释
强制转换导致数据丢失 程序逻辑错误(如金额截断) 先判断范围或使用BigDecimal
浮点数直接比较相等 0.1+0.2 != 0.3 使用误差范围或BigDecimal

五、面试高频考点

Q1:基本类型和包装类的区别?

基本类型直接存储值,效率高,不能用于泛型;包装类是引用类型,可以存储null,提供方法,用于集合。自动装箱拆箱在两者间转换。

Q2:short s = 1; s = s + 1; 为什么报错?

1ints + 1结果是int,赋值给short需要强制转换。改为s += 1可以,因为+=有隐式转换。

Q3:char能存储一个汉字吗?

可以。Java使用Unicode编码,char占2个字节,可以存储基本多文种平面(BMP)中的汉字,如'中'。生僻字可能需要两个char(代理对)。

六、练习题

  1. 简答:写出Java中8种基本类型的字节长度和默认值。
  2. 代码结果double d = 1.0 - 0.9; System.out.println(d); 输出什么?为什么?
  3. 动手:写一个程序,将double类型金额123.456转换为int分(乘以100再转换),观察结果是否符合预期,并解释。


📊 你的学习进度

  • 当前:第8篇 / 共44篇 · 第二阶段:核心语法与面向对象(第5~20篇)
  • ✅ 已完成:第1~7篇
  • 📖 正在学:第8篇
  • ⏳ 待学习:第9~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇预告

《Java运算符简介》

内容简介:算术、赋值、比较、逻辑、位、三元运算符全解析,短路与非短路区别,优先级记忆口诀。

💡 学完这篇,你将能写出更简洁高效的表达式,面试不再怕“a+=a++”这类题。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!

更多推荐