以下是 Java 中 数据类型、运算符 和 方法 的重点总结(以 2026 年视角,基于 Java 21/22/23 LTS 及主流面试/实际开发需求)。内容覆盖核心概念、易错点、面试高频考点和 JDK 最新特性影响。
1. 数据类型(Data Types)
Java 是 强类型语言,所有变量在使用前必须声明类型。
1.1 基本数据类型(Primitive Types) — 8 种
| 类型 | 字节数 | 位数 | 默认值 | 取值范围 | 包装类 | 面试常考点 |
|---|---|---|---|---|---|---|
| byte | 1 | 8 | 0 | -128 ~ 127 | Byte | 网络传输、文件读写常用最小单位 |
| short | 2 | 16 | 0 | -32,768 ~ 32,767 | Short | 很少单独使用,常出现在数组/集合中 |
| int | 4 | 32 | 0 | -2³¹ ~ 2³¹-1 | Integer | 默认整数类型,常用 |
| long | 8 | 64 | 0L | -2⁶³ ~ 2⁶³-1 | Long | 时间戳、大整数必须用 long + L 后缀 |
| float | 4 | 32 | 0.0f | ±3.4E38(约6-7位有效数字) | Float | 科学计算,注意精度丢失 |
| double | 8 | 64 | 0.0 | ±1.8E308(约15位有效数字) | Double | 默认浮点类型,常用 |
| char | 2 | 16 | ” | Unicode 0 ~ 65535(” ~ ‘\uFFFF’) | Character | Unicode 字符,注意 ‘\uXXXX’ 表示法 |
| boolean | ~1bit | — | false | true / false | Boolean | 不能用 0/1 代替(不像 C/C++) |
高频面试点:
- boolean 占用内存:理论上 1 bit,实际 JVM 实现可能是 1 byte(数组中可能是 bit-packed)
- char 是 无符号 16 位整数,可存储 Unicode 字符
- 整数默认 int,浮点默认 double
- 字面量:long 要加 L/l,float 要加 F/f
1.2 引用数据类型(Reference Types)
- 类(class)、接口(interface)、数组(array)、枚举(enum)、记录(record,Java 16+)、注解(@interface)
- 默认值:null
- 存储的是 引用(地址),不是实际对象
1.3 自动装箱/拆箱(Autoboxing & Unboxing) — 面试必考
Integer i = 100; // 自动装箱 int → Integer
int j = i; // 自动拆箱 Integer → int
// 经典陷阱
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true (-128~127 缓存)
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false 超出缓存范围,新对象
Integer 缓存范围:-128 ~ 127(可通过 -XX:AutoBoxCacheMax 修改,但不推荐)
2. 运算符(Operators)
2.1 分类一览表
| 优先级 | 类别 | 运算符 | 结合性 | 说明与陷阱 |
|---|---|---|---|---|
| 1 | 后缀/创建/访问 | expr++, expr–, new, (), ., [] | 从左到右 | new 优先级很高 |
| 2 | 前缀/一元 | ++expr, –expr, +,-, !, ~, (type) | 从右到左 | 注意 ! 与 ~ 的区别 |
| 3 | 乘除取模 | *, /, % | 从左到右 | 整数除法直接截断,向零取整 |
| 4 | 加减 | +, – | 从左到右 | + 字符串拼接优先级高于算术 |
| 5 | 移位 | <<, >>, >>> | 从左到右 | >>> 无符号右移(正数无影响,负数变正) |
| 6 | 关系 | <, <=, >, >=, instanceof | 从左到右 | instanceof 优先级低于比较 |
| 7 | 相等 | ==, != | 从左到右 | 对象比较地址,基本类型比较值 |
| 8 | 按位与 | & | 从左到右 | — |
| 9 | 按位异或 | ^ | 从左到右 | — |
| 10 | 按位或 | | | 从左到右 | — |
| 11 | 逻辑与 | && | 从左到右 | 短路 |
| 12 | 逻辑或 | || | 从左到右 | 短路 |
| 13 | 条件 | ? : | 从右到左 | 三元运算符 |
| 14 | 赋值及复合赋值 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= | 从右到左 | 复合赋值有隐式强制转换 |
2.2 高频易错点
- && vs &、|| vs |
- && / || 是短路逻辑运算符,左边为 false/true 就不计算右边
- & / | 是按位/逻辑运算符,两边都会计算(可能导致 NullPointerException)
- 整数除法:5 / 2 = 2(向零取整)
- 复合赋值隐式转换(经典面试题)
short s = 1;
s += 1; // 合法!相当于 s = (short)(s + 1)
s = s + 1; // 编译错误!int 不能直接赋给 short
- 字符串 +:只要有一边是 String,就进行拼接(优先级高于算术)
System.out.println(1 + 2 + "3"); // "33"
System.out.println("1" + 2 + 3); // "123"
- 移位运算:常用于位运算优化、权限标志、哈希计算
3. 方法(Method)
3.1 方法签名(Signature)
[修饰符] 返回类型 方法名(参数列表) [throws 异常列表]
3.2 方法分类
| 类别 | 特点 | 示例 |
|---|---|---|
| 普通实例方法 | 属于对象,需通过实例调用 | public void eat() |
| static 方法 | 属于类,可通过类名调用,无 this | public static int max(int a, int b) |
| final 方法 | 不能被子类重写 | — |
| abstract 方法 | 抽象类/接口中声明,无实现 | abstract void run(); |
| default 方法 | Java 8+ 接口默认方法,有默认实现 | default void sort() |
| synchronized 方法 | 线程同步(锁对象或类) | public synchronized void inc() |
3.3 方法重载(Overload) — 编译期多态
- 方法名相同,参数列表不同(个数、类型、顺序)
- 与返回值类型、访问修饰符、异常无关
3.4 可变参数(Varargs) — Java 5+
public void printAll(String... args) {
for (String s : args) System.out.println(s);
}
printAll("a", "b", "c"); // 合法
printAll(); // 合法,args.length == 0
注意:可变参数只能出现在参数列表最后,且一个方法只能有一个可变参数。
3.5 方法参数传递机制
- 基本类型:值传递(拷贝值)
- 引用类型:引用传递(拷贝引用地址)
→ 方法内修改对象属性 → 生效
→ 方法内让参数指向新对象 → 不影响外部
经典面试题:
void change(String str, int[] arr) {
str = "world"; // 不影响外部
arr[0] = 999; // 影响外部
}
4. 2025–2026 最新特性影响(Java 21/22/23)
- String Templates(Java 21 预览 → 22 预览 → 23 撤回)
- 曾计划用
STR."Hello \{name}"替代字符串拼接,目前暂未正式落地 - 未命名变量和模式(Java 22+):用
_忽略未使用变量/参数 - 隐式声明的类与实例 main 方法(Java 21+ 预览):简化入门
// Java 22+ 预览写法(需启用预览)
void main() {
System.out.println("Hello");
}
总结一句话口诀(面试背诵用)
“八基四引,装箱拆箱陷阱多;运算优先级记清楚,短路逻辑别算错;方法签名重载别混淆,参数传递值引用要分清。”
如果需要针对某个部分(如位运算实战、方法重载 vs 重写对比、面试真题解析)继续深入,欢迎继续问!