13.赋值运算符
分类: Java 专栏: 【带小白】java基础速成 标签: 赋值运算符
2025-11-23 13:51:48 107浏览
Java 赋值运算符详解与练习
一、 赋值运算符概述
赋值运算符是编程中最基本、最常用的运算符之一,用于将一个值(或表达式的结果)赋给一个变量。
1. 基本赋值运算符 =
- 符号:=
- 作用:将右边的数据或表达式的值,赋给左边的变量。
- 示例:
int a = 10; // 将整数值 10 赋给变量 a
int b = 5; // 将整数值 5 赋给变量 b2. 复合赋值运算符
复合赋值运算符是算术运算符与赋值运算符的结合,可以使代码更简洁。
- 符号:+=, -=, *=, /=, %=
- 作用:将变量自身的值与右边的值进行算术运算后,再赋值给自身。
- 语法规则:
- 变量 += 表达式 等价于 变量 = 变量 + (表达式)
- 变量 -= 表达式 等价于 变量 = 变量 - (表达式)
- 变量 *= 表达式 等价于 变量 = 变量 * (表达式)
- 变量 /= 表达式 等价于 变量 = 变量 / (表达式)
- 变量 %= 表达式 等价于 变量 = 变量 % (表达式)
- 示例:
int a = 10;
a += 2; // 等价于 a = a + 2; 结果 a 的值为 12
int b = 10;
b *= 3; // 等价于 b = b * 3; 结果 b 的值为 30
int c = 10;
c /= 3; // 等价于 c = c / 3; 结果 c 的值为 3 (整数除法)【重点】复合赋值运算符的隐藏特性:
复合赋值运算符(如 +=, -=, *= 等)不会改变运算结果的数据类型,会自动进行强制类型转换。这个特性非常重要,也是很多面试题的考点。
二、 经典练习题
下面我们通过几个练习来深入理解赋值运算符,特别是其类型转换的特性。
练习1:类型转换问题
问题: 观察下面两行代码,分析它们的区别。
short s = 3;
s = s + 2; // ① 编译报错
s += 2; // ② 正常执行解析与答案:
- s = s + 2; 会编译报错。
- 原因:s 是 short 类型,2 是 int 类型(默认)。在 s + 2 这个表达式中,s 会被自动提升为 int 类型进行运算,所以 s + 2 的结果是 int 类型。将一个 int 类型的结果直接赋值给一个 short 类型的变量 s,会有数据丢失的风险,因此编译器会报错,提示“可能存在精度损失”。
- 解决方法:必须进行强制类型转换:s = (short) (s + 2);
- s += 2; 可以正常执行。
- 原因:这正是复合赋值运算符的隐藏特性。s += 2; 在底层被虚拟机处理为 s = (short) (s + 2);。它自动完成了强制类型转换,所以不会报错。
结论:当变量和常量进行运算并赋值给自身时,使用复合赋值运算符(如 +=)可以避免手动强制类型转换,让代码更简洁。
练习2:混合类型赋值
问题: 下列代码执行后,变量 i 的值是多少?
int i = 1;
i += 6.1; // 6.1 是 double 类型
System.out.println(i);解析与答案:
- 执行结果:7
- 原因:i 是 int 类型,6.1 是 double 类型。表达式 i += 6.1 等价于 i = (int) (i + 6.1)。
- 首先计算 i + 6.1,结果是 7.1(double 类型)。
- 然后进行强制类型转换 (int) 7.1,小数部分被直接截断,得到 7。
- 最后将 7 赋值给变量 i。
- 注意:原文档注释中写的是 //8,这应该是一个笔误,根据运算逻辑,正确结果应为 7。
练习3:自增自减与赋值
问题: 下列代码执行后,变量 m 和 n 的值分别是多少?
int m = 2;
int n = 3;
m = n++; // ①
n = ++m; // ②
System.out.println("m=" + m);
System.out.println("n=" + n);解析与答案:
- 执行结果:
m=4
n=4- 步骤分析:
- 初始状态:m = 2, n = 3
- 执行 m = n++;:
- n++ 是后缀自增,先使用 n 的原始值 3 赋给 m,然后 n 再自增 1。
- 执行后:m 变为 3,n 变为 4。
- 执行 n = ++m;:
- ++m 是前缀自增,m 先自增 1(从 3 变为 4),然后将新值 4 赋给 n。
- 执行后:m 变为 4,n 变为 4。
- 最终状态:m = 4, n = 4。
练习4:复杂表达式赋值
问题: 下列代码执行后,变量 n 的值是多少?
int n = 18;
n += (n++) + (++n);
System.out.println(n);解析与答案:
- 执行结果:56
- 步骤分析:
n += (n++) + (++n);就相当于 n=n+(n++) + (++n)
计算n+(n++) + (++n)即可
18+18+20=56
三、 综合应用:如何实现变量值减1/减2
对于一个 short 类型的变量,我们想让它减 1 或 2,有哪些方法?
short s = 19;
// 目标:让 s 的值变为 18实现方式:
- 方式一:普通运算 + 强制类型转换
s = (short) (s - 1);- 优点:逻辑清晰,易于理解。
- 缺点:代码繁琐,容易忘记强制转换而报错。
- 方式二:自增自减运算符(推荐)
s--; // 或者 --s- 优点:代码最简洁,可读性高,效率也高。
- 方式三:复合赋值运算符
s -= 1;- 优点:代码简洁,且自动处理类型转换,非常安全。
如果要减2呢?
short s1 = 19;
// 目标:让 s1 的值变为 17- 方式一:s1 = (short) (s1 - 2);
- 方式二:s1 -= 2; (推荐,简洁且安全)
总结:在对变量自身进行加减操作时,优先考虑使用复合赋值运算符(+=, -=)或自增自减运算符(++, --),它们不仅代码简洁,还能有效避免类型转换问题。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论
您可能感兴趣的博客



新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成