【Java】数据类型、运算符和方法 重点总结
(适合初学者快速掌握 + 面试/考试核心回顾)
一、Java 数据类型(8种基本类型 + 引用类型)
1. 八大基本数据类型(primitive types)
| 类型 | 关键字 | 占用字节 | 默认值 | 取值范围 | 包装类 | 备注与常见用途 |
|---|---|---|---|---|---|---|
| 整型 | byte | 1 | 0 | -128 ~ 127 | Byte | 字节流、网络传输、小范围整数 |
| short | 2 | 0 | -32768 ~ 32767 | Short | 较少单独使用 | |
| int | 4 | 0 | -2³¹ ~ 2³¹-1 ≈ ±21亿 | Integer | 最常用整数类型 | |
| long | 8 | 0L | -2⁶³ ~ 2⁶³-1 | Long | 大整数、时间戳、ID,字面量要加 L | |
| 浮点型 | float | 4 | 0.0f | ≈ ±3.4E38(有效数字6~7位) | Float | 字面量要加 f,精度较低 |
| double | 8 | 0.0 | ≈ ±1.8E308(有效数字15~16位) | Double | 默认浮点类型,绝大多数小数计算用它 | |
| 字符型 | char | 2 | ” | 0 ~ 65535(Unicode) | Character | 可存中文 ‘中’、’\u4e2d’ |
| 布尔型 | boolean | ~1 | false | true / false | Boolean | 条件判断,不能参与算术运算 |
记忆口诀:“四整(byte short int long)两浮(float double)一字符一布尔”
2. 基本类型 vs 引用类型
| 特性 | 基本类型(8种) | 引用类型(class、interface、array、enum等) |
|---|---|---|
| 存储位置 | 栈(局部变量) | 栈中存引用(地址),实际对象在堆中 |
| 默认值 | 有(0、false、等) | null |
| 是否可为 null | 否 | 是 |
| 传递方式 | 值传递 | 引用传递(传地址) |
| 是否有方法 | 没有(包装类才有) | 有 |
二、Java 运算符(优先级从高到低)
| 优先级 | 运算符类别 | 运算符 | 结合性 | 说明与注意点 |
|---|---|---|---|---|
| 1 | 后缀 | . [] () | 左→右 | 方法调用、数组下标、成员访问 |
| 2 | 一元 | ++ — + – ! ~ (type) | 右→左 | 自增自减、取反、强制类型转换 |
| 3 | 乘除取模 | * / % | 左→右 | % 对负数结果符号跟被除数一致 |
| 4 | 加减 | + – | 左→右 | + 也可用于字符串拼接 |
| 5 | 位移 | << >> >>> | 左→右 | >>> 无符号右移(高位补0) |
| 6 | 关系 | < <= > >= instanceof | 左→右 | instanceof 判断类型 |
| 7 | 等值 | == != | 左→右 | 基本类型比值,引用类型比地址 |
| 8 | 位与 | & | 左→右 | |
| 9 | 位异或 | ^ | 左→右 | |
| 10 | 位或 | | | 左→右 | |
| 11 | 逻辑与 | && | 左→右 | 短路(左边false右边不执行) |
| 12 | 逻辑或 | || | 左→右 | 短路(左边true右边不执行) |
| 13 | 条件 | ? : | 右→左 | 三元运算符 |
| 14 | 赋值及复合赋值 | = += -= *= /= %= &= |= ^= <<= >>= >>>= | 右→左 | a += 5 等价于 a = a + 5 |
高频考点:
&&和&的区别(短路 vs 不短路)==与equals()的区别+字符串拼接的性能问题(建议用 StringBuilder)- 整数运算溢出(int 相加超过 2³¹-1 会绕回负数)
三、方法(Method)重点总结
1. 方法的完整格式
[修饰符列表] 返回值类型 方法名(形式参数列表) [throws 异常列表] {
方法体...
[return 返回值;]
}
2. 方法的分类(面试常考)
| 类型 | 特点 | 示例 | 能否被继承/重写 |
|---|---|---|---|
| 普通实例方法 | 属于对象,必须通过对象调用 | public void eat() | 可重写 |
| 静态方法 | 属于类,用类名调用 | public static void sleep() | 不可重写(隐藏) |
| 构造方法 | 无返回值类型,方法名=类名 | public Person() | — |
| final 方法 | 不能被子类重写 | public final void show() | 不可重写 |
| abstract 方法 | 只有声明,无实现,抽象类/接口中使用 | public abstract void run(); | 必须重写 |
3. 方法参数传递机制(非常重要!)
- Java 只有一种参数传递方式:值传递
- 基本类型:传递的是值的副本
- 引用类型:传递的是地址的副本(不是引用本身)
void change(int a) { a = 100; } // 外部变量不变
void change(int[] arr) { arr[0] = 999; } // 外部数组会变(改的是堆中对象)
4. 方法重载(Overload)
- 同一个类中
- 方法名相同
- 参数列表不同(个数、类型、顺序)
- 与返回值类型、访问修饰符无关
void print(int a) {}
void print(double a) {}
void print(int a, String b) {}
5. 方法重写(Override)规则
- 子类重写父类方法
- 方法名、参数列表完全相同
- 返回值类型:基本类型必须相同,引用类型可以是子类型(协变返回)
- 访问权限不能变严格(public → protected → default → private)
- 抛出异常不能更广(可以更窄或不抛)
四、常见面试/易错点速记
- float f = 3.14; // 错误!要写 3.14f
- long l = 10000000000; // 错误!要写 10000000000L
- int a = 10 / 0; // ArithmeticException
- String s = null; s.length(); // NullPointerException
- 1 + 2 + “3” → “33”
“1” + 2 + 3 → “123” &&短路 vs&不短路(后者可能导致空指针)==比较基本类型值,引用类型比较地址- 方法中 return 后面代码不会执行
希望这份总结能帮你快速建立清晰的知识框架!
如果你想针对某个部分深入(例如:包装类、自动装箱拆箱、方法重写 vs 重载对比、运算符优先级经典题),可以直接告诉我,我继续展开讲解。