目录
[2.1 整数型(4 种:byte、short、int、long)](#2.1 整数型(4 种:byte、short、int、long))
[2.2 浮点型(2 种:float、double)](#2.2 浮点型(2 种:float、double))
[2.3 字符型(1 种:char)](#2.3 字符型(1 种:char))
[2.4 布尔型(1 种:boolean)](#2.4 布尔型(1 种:boolean))
[3.1 常见引用类型](#3.1 常见引用类型)
[3.2 与基本类型的关键区别](#3.2 与基本类型的关键区别)
[4.1 为什么需要变量?(使用场景)](#4.1 为什么需要变量?(使用场景))
[4.2 变量的 3 大核心用法](#4.2 变量的 3 大核心用法)
[5.1 变量同一时刻只能存一个值](#5.1 变量同一时刻只能存一个值)
[5.2 同作用域内,变量名不能重复](#5.2 同作用域内,变量名不能重复)
[5.3 一条语句可定义多个同类型变量](#5.3 一条语句可定义多个同类型变量)
[5.4 使用变量前必须赋值](#5.4 使用变量前必须赋值)
[7.1 范围排序解析(用户小结要点)](#7.1 范围排序解析(用户小结要点))
[7.2 byte 范围的本质(-128 ~ 127)](#7.2 byte 范围的本质(-128 ~ 127))
[7.3 实践避坑:类型选择与溢出](#7.3 实践避坑:类型选择与溢出)
一、数据类型分类
Java 的数据类型分为 两大阵营 ,直接决定 变量的存储规则:
类型 | 存储内容 | 内存表现 | 示例类型 |
---|---|---|---|
基本数据类型 | 直接存储值本身 | 栈内存直接存值 | byte 、int 、char 、boolean 等 |
引用数据类型 | 存储对象的内存地址 | 栈存地址,堆存实际对象 | String 、数组、类、接口等 |
二、基本数据类型:四类八种
基本数据类型细分为 4 类 8 种 ,每类都有严格的 字节大小、取值范围,直接影响变量能存储的数据范围:
2.1 整数型(4 种:byte
、short
、int
、long
)
作用:存储整数(无小数部分的值)。
类型 | 字节数 | 取值范围 | 示例(变量定义) |
---|---|---|---|
byte |
1 字节 | -128 ~ 127 (-2⁷ ~ 2⁷-1 ) |
byte age = 20; |
short |
2 字节 | -32768 ~ 32767 (-2¹⁵ ~ 2¹⁵-1 ) |
short score = 950; |
int |
4 字节 | -2¹⁴⁷⁴⁸³⁶⁴⁸ ~ 2¹⁴⁷⁴⁸³⁶⁴⁷ |
int population = 100000; |
long |
8 字节 | -2⁶³ ~ 2⁶³-1 |
long money = 10000000000L; (需加L ) |
2.2 浮点型(2 种:float
、double
)
作用:存储小数(支持科学计数法,范围比整数型更 "极端")。
类型 | 字节数 | 取值范围(近似) | 示例(变量定义) |
---|---|---|---|
float |
4 字节 | ±3.4e-38 ~ ±3.4e38 |
float pi = 3.14F; (需加F ) |
double |
8 字节 | ±1.7e-308 ~ ±1.7e308 |
double price = 9.99; |
2.3 字符型(1 种:char
)
作用:存储单个字符(如字母、符号、中文,本质是 Unicode 编码)。
类型 | 字节数 | 取值范围 | 示例(变量定义) |
---|---|---|---|
char |
2 字节 | 0 ~ 65535 |
char gender = 'M'; char chinese = '中'; (Unicode 支持) |
2.4 布尔型(1 种:boolean
)
作用 :存储逻辑值(仅 true
/ false
)。
类型 | 字节数 | 取值范围 | 示例(变量定义) |
---|---|---|---|
boolean |
1 字节 | true / false |
boolean isLogin = true; |
三、引用数据类型:地址的容器
核心特点 :变量存储的是对象在堆内存的地址,而非值本身。
3.1 常见引用类型
- 字符串 :
String name = "Alice";
(name
存的是字符串对象的地址)。 - 数组 :
int[] scores = {90, 85};
(scores
存数组的地址)。 - 自定义类 / 接口 :
Student stu = new Student();
(stu
存Student
对象的地址)。
3.2 与基本类型的关键区别
对比项 | 基本类型 | 引用类型 |
---|---|---|
存储内容 | 值本身 | 对象的地址 |
默认值 | 如 int 是 0 ,boolean 是 false |
null (无地址,未指向任何对象) |
内存位置 | 栈内存 | 栈存地址,堆存对象 |
四、变量的使用场景与操作方式
4.1 为什么需要变量?(使用场景)
-
场景 1:重复使用某个值
若数据需多次调用(如圆周率
3.14
),用变量存储可避免重复写字面量,提升代码复用性。double pi = 3.14; double area1 = pi * 2 * 2; // 计算半径2的圆面积 double area2 = pi * 5 * 5; // 计算半径5的圆面积
-
场景 2:数据动态变化
若数据会更新(如用户分数、商品库存),变量可灵活记录变化。
int stock = 100; // 初始库存 stock = 80; // 库存减少(数据变化)
4.2 变量的 3 大核心用法
-
用法 1:输出打印
将变量的值展示到控制台,用于调试或结果展示。
int score = 95; System.out.println("你的分数:" + score); // 输出:你的分数:95
-
用法 2:参与计算
变量作为运算 "原料",支持数学计算、逻辑判断等。
int a = 10, b = 20; int sum = a + b; // 变量参与加法运算 System.out.println("和:" + sum); // 输出:和:30
-
用法 3:修改值(覆盖旧数据)
变量的值可动态更新,新值会覆盖旧值。
int level = 1; level = 2; // 旧值 1 被覆盖,level 变为 2
五、变量的注意事项
5.1 变量同一时刻只能存一个值
新赋值会覆盖旧值,变量始终保存最后一次赋值的结果。
int num = 10;
num = 20; // 旧值 10 被覆盖,num 最终为 20
5.2 同作用域内,变量名不能重复
若重复定义同名变量,编译器会报错("变量已存在")。
int age = 20;
// int age = 30; // 错误!age 已存在
5.3 一条语句可定义多个同类型变量
语法:数据类型 变量1=值1, 变量2=值2;
(类型必须一致)。
// 正确:int 类型的 x 和 y
int x = 1, y = 2;
// 错误:String 和 int 类型不同,不能同语句定义
// String name="Tom", age=20;
5.4 使用变量前必须赋值
未赋值的变量无法使用(Java 会编译报错,避免空数据错误)。
int num;
// System.out.println(num); // 错误!num 未赋值
num = 10; // 先赋值,再使用
System.out.println(num); // 正确:10
六、数据类型与变量的绑定关系
变量的定义 必须指定数据类型,类型直接决定:
- 能存什么值 :
int
变量只能存整数,String
变量只能存字符串地址。 - 占多少内存 :
byte
占 1 字节,double
占 8 字节。
示例:
// 步骤1:指定类型 → int(4字节,存整数)
int num;
// 步骤2:赋值 → 必须符合类型规则(此处存整数100)
num = 100;
// 错误示例:类型不匹配
// num = 3.14; // 编译报错:double不能存到int变量
七、取值范围的深层逻辑与实践
7.1 范围排序解析(用户小结要点)
规则 :double > float > long > int > short > byte
原因:
- 浮点型(
float
/double
) 用 科学计数法 存储(如3.4e38
),虽占字节少,但表示范围远大于整数型(如long
最大约9e18
,远小于float
的3.4e38
)。 - 整数型 按字节数递增,范围自然扩大(
byte
1 字节 <short
2 字节 < ... <long
8 字节)。
7.2 byte
范围的本质(-128 ~ 127)
byte
占 1 字节(8 位) ,最高位是 符号位(0 表示正数,1 表示负数):
- 正数范围:
00000000 ~ 01111111
→0 ~ 127
(2⁷-1
)。 - 负数范围:
10000000 ~ 11111111
→ 用补码 表示,实际对应-128 ~ -1
。
7.3 实践避坑:类型选择与溢出
-
选对类型,节省内存 :
- 年龄(0~200)→
byte
(1 字节),而非int
(4 字节)。 - 金额(需精度)→
double
或BigDecimal
(避免浮点误差)。
- 年龄(0~200)→
-
警惕溢出 :
int maxInt = 2147483647; // maxInt = maxInt + 1; // 溢出!结果变为 -2147483648(int范围超限) long maxLong = 2147483648L; // 加L,用long存大数
八、总结:变量与数据类型的协同逻辑
- 变量是 "容器",数据类型是 "容器的规则":规定容器能装什么值、占多少空间。
- 基本类型存值,引用类型存地址:前者直接操作值,后者操作对象的引用。
- 范围决定能力 :选类型时,优先匹配数据的实际范围(如小数用浮点,大整数用
long
)。
如果我的内容对你有帮助,请点赞,评论,收藏。接下来我将继续更新相关内容!