02、Java 基础硬核复习:变量与运算符的“避坑”指南

02、Java 基础硬核复习:变量与运算符的"避坑"指南

第一部分:核心基础知识体系

1. Java 的 8 大基本数据类型

Java 是强类型语言,牢记这 8 种类型及其占用的内存空间是基本功:

分类 类型 字节 默认值 注意点
整型 byte 1 0 参与运算时会自动提升为 int
short 2 0 同上
int 4 0 整数默认类型
long 8 0L 定义时必须 加后缀 L (如 100L)
浮点型 float 4 0.0f 定义时必须 加后缀 F (如 3.14F)
double 8 0.0d 小数默认类型,精度比 float 高
字符型 char 2 '\u0000' 采用 Unicode 编码,可以存一个汉字
布尔型 boolean 1位* false 只有 truefalse

:boolean 在内存中的大小并未明确定义,依赖于 JVM 实现,通常单独使用时占 4 字节(当作 int 处理),数组时占 1 字节。

2. 类型转换规则

  • 自动提升(隐式转换) :小范围----->大范围。
    • 规则:byteshortchar 在参与运算时,会直接提升为 int
  • 强制转换(显式转换) :大范围 ----> 小范围。
    • 格式:(类型) 变量名
    • 风险:可能会导致精度丢失数据溢出

第二部分:运算符的高效与逻辑

1. 逻辑运算符:&& vs &

  • & (逻辑与):两边都会执行。
  • && (短路与)推荐使用 。如果左边为 false,右边不再执行,效率更高,且能避免空指针异常。
  • 同理,|| (短路或) 比 | 更常用。

2. 位运算符:计算机的"原生语言"

位运算直接操作二进制位,效率极高。

  • 左移 << :相当于乘以 2。例如 2 << 3 等于 2×23=162 \times 2^3 = 162×23=16。这是计算 2 * 8 最快的方式。
  • 右移 >>:带符号右移(正补0,负补1)。相当于除以 2。
  • 无符号右移 >>>:无论正负,高位全部补 0。常用于哈希算法。
  • 异或 ^ :相同为 0,不同为 1。技巧:可以用于不引入第三个变量交换两个整数的值。

第三部分:高频面试"陷阱" (Deep Dive)

这部分是本文的精华,专门解决那些"看着对,运行错"的代码。

陷阱 1:i = i++ 的诡异结果

java 复制代码
int i = 1;
i = i++;
System.out.println(i); // 结果是 1,不是 2!

原理

JVM 在处理 i++ 时,会先将 i 的当前值(1)压入操作数栈作为"临时替身",然后 i 变量自增变为 2。但最后一步赋值操作,是将**操作数栈里的替身(1)**重新赋给了 i,导致自增无效。

陷阱 2:short 类型的运算

java 复制代码
short s = 1;
s = s + 1; // ❌ 编译报错!1是int,运算结果是int,不能直接给short
s += 1;    // ✅ 正确!

原理

扩展赋值运算符(+=, -=, *= 等)内部隐含了强制类型转换s += 1 等价于 s = (short)(s + 1)

陷阱 3:浮点数的"薛定谔"精度

java 复制代码
double d = 0.1 + 0.2;
System.out.println(d == 0.3); // false
// 输出:0.30000000000000004

原理

计算机用二进制存小数,无法精确表示 0.1。
解决方案

在金融、电商涉及金额计算时,禁止 使用 float/double,必须使用 BigDecimal 类,且必须使用字符串构造器 new BigDecimal("0.1")

陷阱 4:String 拼接的顺序

java 复制代码
System.out.println(1 + 2 + "abc"); // 输出 "3abc"
System.out.println("abc" + 1 + 2); // 输出 "abc12"

原理

运算符从左到右执行。第一行先做加法再拼接;第二行一开始遇到 String,+ 就变成了连接符,后面的数字通通被当成字符串拼接。

陷阱 5:变量初始化

java 复制代码
public void test() {
    int a;
    System.out.println(a); // ❌ 编译报错
}

原理

局部变量 (方法内部)没有默认值,必须手动初始化 才能使用。只有成员变量(类里)才有默认值(如 int 为 0)。

总结

变量与运算符是 Java 编程的基石,看似简单,实则暗藏玄机。掌握这些细节,不仅能让你在面试中脱颖而出,更能避免在实际开发中写出隐藏的 Bug。基础不牢,地动山摇。希望这篇"避坑指南"能助你一臂之力!

相关推荐
社交怪人20 分钟前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
阿维的博客日记23 分钟前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI24 分钟前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
郭涤生1 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS1 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣1 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100861 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
彦为君2 小时前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
辰海Coding2 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi