【Java SE 基础学习打卡】17 基本数据类型

前言

咱们上一节学了变量,知道变量是装数据的 “容器”。但你有没有想过:装年龄(整数)和装身高(小数)的 “容器” 能一样吗?肯定不一样 —— 就像装大米用麻袋,装红酒用酒瓶,不同的数据得用不同类型的 “容器”。Java 是 “强类型语言”,要求每个变量必须明确数据类型,这样才能合理分配内存、避免数据出错。这一节咱们就吃透 Java 的 8 种基本数据类型,再搞懂不同类型之间怎么转换,以后写代码选对 “容器” 就再也不慌了!

一、先分清:Java 数据类型分两类

Java 里的数据类型就像超市的商品分类,主要分两大派,用途截然不同:

在这里插入图片描述

1.1 基本数据类型(直接存值,像 “口袋装钱”)

这类数据类型直接存储具体的值,不绕弯子 —— 就像把钱直接塞在口袋里,用的时候直接拿。Java 一共提供了 8 种基本数据类型,又细分 4 个小家族:

  • 整数家族:byteshortintlong(专门装不带小数点的数);

  • 浮点家族:floatdouble(专门装带小数点的数);

  • 字符家族:char(专门装单个字符,比如字母、符号);

  • 布尔家族:boolean(专门装 “真” 或 “假”)。

1.2 引用数据类型(存地址,像 “口袋装存折”)

这类数据类型不直接存值,而是存数据在内存中的 “地址”—— 就像口袋里装的是银行存折,想用钱得先按地址去银行取。常见的有类(比如以后学的String字符串)、接口、数组、枚举等,这部分咱们后面再详细讲,现阶段重点掌握基本数据类型。

二、逐个攻破:8 种基本数据类型详解

8 种基本数据类型就像 8 个大小、精度不同的 “容器”,各自有专属用途。咱们结合生活例子,一个个讲清楚:

在这里插入图片描述

2.1 整数家族:装不带小数点的数

整数家族有 4 个成员,特点是 “占用内存越小,能装的数值范围越小”,按需选择就行:

类型占用内存取值范围生活用途举例
byte1 字节-128 ~ 127存月份(1-12)、成绩等级(0-100)
short2 字节-32768 ~ 32767存班级人数(1-50)、街道门牌号
int4 字节-2147483648 ~ 2147483647存年龄(0-120)、商品数量
long8 字节极大(约 ±9e18)存全国人口数、银行卡号

使用注意点

  • 平时写代码,整数默认是int类型,所以int是最常用的;

  • long类型赋值时,如果数值超过了int的范围(比如 100 亿),必须在数值末尾加L(推荐大写,小写l容易和数字1混淆),否则编译器会报错。

举个例子:

public static void main(String[] args) {
    byte month = 12; // 月份,用byte足够
    short classSize = 45; // 班级人数,用short
    int age = 25; // 年龄,常用int
    long population = 1400000000L; // 全国人口,加L表示long类型
}

2.2 浮点家族:装带小数点的数

浮点家族专门处理小数,有两个成员,核心区别是 “精度”(小数点后能准确表示的位数):

类型占用内存精度(有效小数位)生活用途举例
float4 字节6-7 位存普通身高(175.5cm)、体重
double8 字节15-16 位存精确金额(399.99 元)、科学计算

使用注意点

  • 小数默认是double类型,所以doublefloat更常用;

  • float类型赋值时,必须在数值末尾加fF,否则编译器会把它当成double,报错 “类型不匹配”。

举个例子:

public static void main(String[] args) {
    float height = 175.5f; // 身高,加f表示float
    double price = 399.99; // 商品价格,默认double,可加d也可不加
}

避坑提醒:浮点类型的精度有限,不能精确表示所有小数。比如用float存很长的小数,后面的数字会 “失真”:

public static void main(String[] args) {
    float f = 3.14151233442587612312f;
    double d = 3.14151233442587612312d;
    System.out.println(f); // 输出会省略部分小数,精度不够
    System.out.println(d); // 保留更多小数位,更精确
}

运行结果:

在这里插入图片描述

2.3 字符家族:装单个字符的char

char类型专门存储单个字符,占用 2 个字节,用单引号' 括起来(注意和字符串的双引号区分)。它的能力很强,能表示:

  • 普通字符:比如'A''9''+''中'

  • 转义字符:一些有特殊功能的字符,比如'\n'(换行)、'\t'(制表符,类似按 Tab 键)、'\\'(表示一个反斜杠);

  • Unicode 编码字符:国际通用的字符编码,格式是'\uXXXX'(XXXX 是 4 位十六进制数),比如'\u0041'就是'A'

使用注意点

  • char只能存 “单个字符”,存多个字符会报错;

  • 字符在计算机底层存储的是对应的编码值(比如'A'对应 65),所以char可以直接当整数用。

举个例子:

public static void main(String[] args) {
    char letter = 'A'; // 普通字符
    char newline = '\n'; // 转义字符(换行)
    char unicodeChar = '\u0041'; // Unicode编码的'A'
    
    System.out.println(letter); // 输出A
    System.out.println(newline); // 输出一个换行
    System.out.println(unicodeChar); // 输出A
    
    // 字符当整数用:'A'(65)+16=81,对应字符'Q'
    System.out.println(letter + 16); // 输出81
}

如果不小心给char存了多个字符,会直接编译报错:

public static void main(String[] args) {
    char wrong = 'ABC'; // 错误:只能存单个字符
}

报错结果:

在这里插入图片描述

2.4 布尔家族:只分 “真”“假” 的boolean

boolean类型是最简单的,只有两个取值:true(真)和false(假),主要用在条件判断中(比如 “如果成绩及格,就输出恭喜”)。

使用注意点

  • 不能用01代替truefalse(这和其他语言不一样,Java 里严格区分);

  • 占用内存没有明确规定,通常是 1 个字节,足够存储两个状态。

举个例子:

public static void main(String[] args) {
    boolean isPass = true; // 考试及格了,真
    boolean hasMoney = false; // 钱包空了,假
    
    if (isPass) {
        System.out.println("恭喜你及格了!"); // 会执行这句话
    }
}

三、灵活转换:不同类型之间怎么转?

写代码时经常需要转换数据类型,比如把int转成double做小数计算。Java 提供了两种转换方式,就像 “倒水”:有的能直接倒,有的得小心倒。

3.1 自动类型转换(隐式转换):安全的 “大杯接小杯”

当把 “小范围类型” 的值转给 “大范围类型” 时,Java 会自动帮你转换 —— 就像把小杯子的水倒进大杯子,不会洒出来,安全无风险。

自动转换规则(按范围从小到大排序,左边能自动转右边):

在这里插入图片描述

  • 整数路线:byteshortintlongfloatdouble

  • 字符路线:charintlongfloatdouble

举个例子:

public static void main(String[] args) {
    byte b = 100;
    int i = b; // byte转int,自动转换(小转大)
    double d = i; // int转double,自动转换
    System.out.println(d); // 输出100.0(成功变成小数)
    
    char c = 'A'; // 'A'对应编码65
    long l = c; // char转long,自动转换
    System.out.println(l); // 输出65
}

避坑提醒:不是所有类型都能自动转!比如把char转给short,不在转换规则里,会直接报错:

public static void main(String[] args) {
    char c = 'A';
    short s = c; // 错误:不兼容的类型,无法自动转换
}

3.2 强制类型转换(显式转换):风险高的 “小杯接大杯”

如果想把 “大范围类型” 转给 “小范围类型”,必须手动加 “转换符” (目标类型)—— 就像用小杯子接大杯子的水,可能会洒出来(数据丢失或溢出),得自己承担风险。

语法格式(目标类型) 要转换的值

举个例子:

public static void main(String[] args) {
    double num = 3.14;
    int result = (int) num; // 强制把double转int,会丢失小数部分
    System.out.println(result); // 输出3(只保留整数)
    
    int value = 65;
    char ch = (char) value; // 强制把int转char,65对应'A'
    System.out.println(ch); // 输出A
}

严重提醒:强制转换可能导致数据溢出!比如把int128转给byte(范围 - 128~127),结果会变成-128,完全失真:

public static void main(String[] args) {
    int bigNum = 128;
    byte smallNum = (byte) bigNum;
    System.out.println(smallNum); // 输出-128(溢出了)
}

所以非必要不做强制转换,必须转换时,一定要确保源数据在目标类型的取值范围内。

总结

学完这一节,你只要记住 3 个核心点:

  1. Java 数据类型分基本和引用两类,咱们重点掌握 8 种基本数据类型;

  2. 8 种基本数据类型各有专属用途:整数用byte/short/int/long,小数用float/double,单个字符用char,真假判断用boolean

  3. 类型转换分两种:小范围转大范围自动转(安全),大范围转小范围要强制转(有风险,需谨慎)。

这些知识是写 Java 代码的基础,以后定义变量时,先想清楚 “要存什么类型的数据”,再选对应的 “容器”,就能避免很多低级错误。多动手写几个例子练一练,很快就能熟练掌握啦!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程实战派-李工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值