【从零开始java学习|第三篇】变量与数据类型的关联
目录
一、数据类型分类
二、基本数据类型:四类八种
2.1 整数型(4 种:byte、short、int、long)
2.2 浮点型(2 种:float、double)
2.3 字符型(1 种:char)
2.4 布尔型(1 种:boolean)
三、引用数据类型:地址的容器
3.1 常见引用类型
3.2 与基本类型的关键区别
四、变量的使用场景与操作方式
4.1 为什么需要变量?(使用场景)
4.2 变量的 3 大核心用法
五、变量的注意事项
5.1 变量同一时刻只能存一个值
5.2 同作用域内,变量名不能重复
5.3 一条语句可定义多个同类型变量
5.4 使用变量前必须赋值
六、数据类型与变量的绑定关系
七、取值范围的深层逻辑与实践
7.1 范围排序解析(用户小结要点)
7.2 byte 范围的本质(-128 ~ 127)
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
)。
如果我的内容对你有帮助,请点赞,评论,收藏。接下来我将继续更新相关内容!