📦 变量与数据类型
什么是变量 · 8 种基本类型 · 命名规则 · 类型转换 · 练习题
1. 什么是变量?为什么需要它?
📦 生活类比——储物盒:变量就是贴了名字标签的储物盒。
你往盒子里放东西(赋值),想用的时候喊盒子的名字(读值),还可以换里面的东西(重新赋值)。
盒子有"类型":有的只能放数字,有的只能放文字——这是 Java 的规矩(强类型语言)。
你往盒子里放东西(赋值),想用的时候喊盒子的名字(读值),还可以换里面的东西(重新赋值)。
盒子有"类型":有的只能放数字,有的只能放文字——这是 Java 的规矩(强类型语言)。
变量的完整写法:类型 + 名字 + 值
// 格式:数据类型 变量名 = 值;
int age = 25; // 声明一个"整数盒子"叫 age,放 25
String name = "张三"; // 声明一个"字符串盒子"叫 name,放 "张三"
double price = 9.9; // 小数盒子 price
boolean isOk = true; // 真假盒子 isOk(true/false)
// 用变量(读值)
System.out.println(name + "今年 " + age + " 岁");
张三今年 25 岁
// 重新赋值(换盒子里的东西)
age = 26; // 注意:这里不用再写 int,只有第一次声明才写类型
🎯 关键点
- 变量 = 类型 + 名字 + 值;先声明后使用
- 重新赋值不再写类型;变量名不能重复声明
- String 是"字符串"类型(双引号包文字);其他基本都是基础类型(下一节)
2. Java 的 8 种基本数据类型(背下来)
| 类型 | 字节 | 范围 | 例子 |
|---|---|---|---|
| byte | 1 | -128 ~ 127 | byte b = 100; |
| short | 2 | -32768 ~ 32767 | short s = 20000; |
| int | 4 | -21 亿 ~ 21 亿 | int age = 25;(整数默认) |
| long | 8 | 超大数字 | long l = 9999999999L;(加 L) |
| double | 8 | 小数(默认) | double p = 3.14; |
| float | 4 | 小数(精度低) | float f = 1.5F;(加 F) |
| char | 2 | 单个字符 | char c = 'A';(单引号!) |
| boolean | JVM 相关 | true / false | boolean ok = true; |
记忆分组:
- 整数 4 种:byte → short → int → long(从 1 字节到 8 字节,越来越大)
- 小数 2 种:float(4 字节)、double(8 字节)
- 字符 1 种:char(放一个字符,单引号 'A')
- 真假 1 种:boolean(true/false)
🎯 易错提醒
- 整数默认 int,小数默认 double——long 数字要加 L,float 要加 F
- char 用单引号,String 用双引号——写错是新手高频报错
- String 不是基本类型(是类),但使用频率最高,先当"特殊基本类型"用
3. 变量命名规则与规范?
硬性规则(不遵守编译报错):
- 只能由字母、数字、下划线 _、美元符 $组成,且不能以数字开头
- 不能是关键字(int、class、public、if 等系统保留词)
- 严格区分大小写:age 和 Age 是两个变量
规范(习惯,建议遵守):
- 变量名:小驼峰——首字母小写,后面单词首字母大写:userName、orderCount
- 类名:大驼峰——每个单词首字母大写:HelloWorld、UserService
- 常量(final):全大写 + 下划线:MAX_VALUE、PI
- 名字要有意义:age 比 a 好,userName 比 un 好——代码是写给人看的
命名示例
// ✅ 好名字
int userAge = 25;
double orderPrice = 99.5;
String studentName = "小明";
// ❌ 坏名字(不报错但不规范)
int a = 25; // a 是什么?
int 2age = 25; // 报错:数字不能开头
int class = 1; // 报错:class 是关键字
4. 类型转换:自动转换和强制转换?
自动类型转换(小 → 大,无需写代码):就像把小杯水倒进大桶,不会洒。
自动转换:范围小的自动变范围大的
int a = 10;
double b = a; // int → double 自动转,b = 10.0
System.out.println(b);
10.0
强制类型转换(大 → 小,要写 (类型)):大桶倒小杯,可能"洒"(丢失精度/溢出)。
强制转换:可能丢精度
double d = 3.99;
int i = (int) d; // 强制转换,小数部分直接砍掉
System.out.println(i);
3 // 注意:不是四舍五入,是直接截断!
经典陷阱:整数除法
int a = 7, b = 2;
System.out.println(a / b); // 整数 ÷ 整数 = 整数:结果是 3(不是 3.5!)
3
// 想得到小数:先让其中一个变成小数
System.out.println(a / (b * 1.0)); // 7 / 2.0 = 3.5
3.5
✍️ 练习题(自己先写,再对照运行结果)
- 1. 定义变量保存:你的年龄(int)、体重(double)、姓名(String)、是否学生(boolean),并打印
- 2. 打印 10 / 3 和 10.0 / 3 的结果,观察区别
- 3. 把 double 3.7 强转成 int 再打印,结果是多少?(答案:3)
- 4. 下面哪个变量名合法?A: 2name B: name2 C: my-name D: my_name
- 5. 报错排查:int x = "10"; 为什么错?(类型不匹配,字符串不能直接给 int)