13.赋值运算符

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: Java 专栏: 【带小白】java基础速成 标签: 赋值运算符

2025-11-23 13:51:48 107浏览

赋值运算符

Java 赋值运算符详解与练习

一、 赋值运算符概述

赋值运算符是编程中最基本、最常用的运算符之一,用于将一个值(或表达式的结果)赋给一个变量。
1. 基本赋值运算符 =

  • 符号:=
  • 作用:将右边的数据或表达式的值,赋给左边的变量。
  • 示例
int a = 10; // 将整数值 10 赋给变量 a
int b = 5;  // 将整数值 5 赋给变量 b

2. 复合赋值运算符
复合赋值运算符是算术运算符与赋值运算符的结合,可以使代码更简洁。

  • 符号:+=, -=, *=, /=, %=
  • 作用:将变量自身的值与右边的值进行算术运算后,再赋值给自身。
  • 语法规则
    • 变量 += 表达式 等价于 变量 = 变量 + (表达式)
    • 变量 -= 表达式 等价于 变量 = 变量 - (表达式)
    • 变量 *= 表达式 等价于 变量 = 变量 * (表达式)
    • 变量 /= 表达式 等价于 变量 = 变量 / (表达式)
    • 变量 %= 表达式 等价于 变量 = 变量 % (表达式)
  • 示例
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;        // ② 正常执行

解析与答案:

  1. s = s + 2; 会编译报错。
    • 原因:s 是 short 类型,2 是 int 类型(默认)。在 s + 2 这个表达式中,s 会被自动提升为 int 类型进行运算,所以 s + 2 的结果是 int 类型。将一个 int 类型的结果直接赋值给一个 short 类型的变量 s,会有数据丢失的风险,因此编译器会报错,提示“可能存在精度损失”。
    • 解决方法:必须进行强制类型转换:s = (short) (s + 2);
  1. 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)。
    1. 首先计算 i + 6.1,结果是 7.1(double 类型)。
    2. 然后进行强制类型转换 (int) 7.1,小数部分被直接截断,得到 7。
    3. 最后将 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
  • 步骤分析
    1. 初始状态:m = 2, n = 3
    2. 执行 m = n++;:
      • n++ 是后缀自增,先使用 n 的原始值 3 赋给 m,然后 n 再自增 1。
      • 执行后:m 变为 3,n 变为 4。
    1. 执行 n = ++m;:
      • ++m 是前缀自增,m 先自增 1(从 3 变为 4),然后将新值 4 赋给 n。
      • 执行后:m 变为 4,n 变为 4。
    1. 最终状态: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

实现方式:

  1. 方式一:普通运算 + 强制类型转换
s = (short) (s - 1);
    • 优点:逻辑清晰,易于理解。
    • 缺点:代码繁琐,容易忘记强制转换而报错。
  1. 方式二:自增自减运算符(推荐)
s--; // 或者 --s
    • 优点:代码最简洁,可读性高,效率也高。
  1. 方式三:复合赋值运算符
s -= 1;
    • 优点:代码简洁,且自动处理类型转换,非常安全。
      如果要减2呢?
short s1 = 19;
// 目标:让 s1 的值变为 17
  • 方式一:s1 = (short) (s1 - 2);
  • 方式二:s1 -= 2; (推荐,简洁且安全)
    总结:在对变量自身进行加减操作时,优先考虑使用复合赋值运算符(+=, -=)或自增自减运算符(++, --),它们不仅代码简洁,还能有效避免类型转换问题。

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695