欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【java第16集】java运算符详解

【java第16集】java运算符详解

2025/7/5 11:17:59 来源:https://blog.csdn.net/shuiziliu518/article/details/148064910  浏览:    关键词:【java第16集】java运算符详解

文章目录

  • 1. Java运算符分类
  • 2. Java运算符分类详细介绍
    • 2.1 算术运算符
    • 2.2 赋值运算符
    • 2.3 比较运算符
    • 2.4 逻辑运算符
    • 2.5 位运算符
    • 2.6 条件运算符(三目运算符)
    • 2.7 其他运算符
  • 3. Java运算符优先级(从高到低)
  • 4. 常见问题与解决方案
  • 5. 最佳实践
  • 6. 总结

1. Java运算符分类

Java 运算符按功能可分为以下几类:

  1. 算术运算符(+、-、*、/、%、++、–)
  2. 赋值运算符(=、+=、-=、*=、/=、%= 等)
  3. 比较运算符(>、<、==、!=、>=、<=)
  4. 逻辑运算符(&&、||、!)
  5. 位运算符(&、|、^、~、<<、>>、>>>)
  6. 条件运算符(? :)
  7. 其他运算符(instanceof、[]、() 等)

2. Java运算符分类详细介绍

2.1 算术运算符

用于基本数学运算。

运算符描述示例
+加法int a = 5 + 3;
-减法int b = 5 - 3;
*乘法int c = 5 * 3;
/除法int d = 6 / 3;
%取模(余数)int e = 7 % 3;
++自增int f = 5; f++;
--自减int g = 5; g--;

注意事项

  • 整数除法int / int 结果仍为 int,小数部分会被截断(如 5 / 2 结果为 2)。
  • 类型转换:若操作数类型不同,会向高精度类型转换(如 int + double 结果为 double)。
  • 自增/自减
    • 前缀++a):先自增,再返回值。
    • 后缀a++):先返回值,再自增。

2.2 赋值运算符

将右侧值赋给左侧变量。

运算符描述示例
=简单赋值int a = 5;
+=加后赋值a += 3;(等价于 a = a + 3
-=减后赋值a -= 3;(等价于 a = a - 3
*=乘后赋值a *= 3;(等价于 a = a * 3
/=除后赋值a /= 3;(等价于 a = a / 3
%=取模后赋值a %= 3;(等价于 a = a % 3

注意事项

  • 仅变量可用:赋值运算符左侧必须是变量(如 a += 3),不能是常量(如 5 += 3 报错)。

2.3 比较运算符

比较两个值,返回布尔结果(truefalse)。

运算符描述示例
==等于boolean c = (a == b);
!=不等于boolean d = (a != b);
>大于boolean e = (a > b);
<小于boolean f = (a < b);
>=大于等于boolean g = (a >= b);
<=小于等于boolean h = (a <= b);

注意事项

  • 对象比较== 比较引用地址,equals() 比较内容(需重写 equals 方法)。
  • 类型匹配:操作数类型需兼容(如 intdouble 可比较)。

2.4 逻辑运算符

组合布尔表达式。

运算符描述示例
&&逻辑与(短路)boolean a = true && false;
||逻辑或(短路)boolean b = true || false;
!逻辑非boolean c = !true;

注意事项

  • 短路特性
    • &&:若左侧为 false,右侧不再计算。
    • ||:若左侧为 true,右侧不再计算。
  • 非短路运算符&(与)、|(或)会强制计算两侧表达式。

2.5 位运算符

对二进制位进行操作。

运算符描述示例
&按位与int a = 5 & 3;(结果为 1
|按位或int b = 5 | 3;(结果为 7
^按位异或int c = 5 ^ 3;(结果为 6
~按位取反int d = ~5;(结果为 -6
<<左移int e = 5 << 1;(结果为 10
>>带符号右移int f = -5 >> 1;(结果为 -3
>>>无符号右移int g = -5 >>> 1;(结果为 2147483646

注意事项

  • 左移效果a << n 等价于 a * 2^n
  • 右移效果a >> n 等价于 a / 2^n(保留符号位)。
  • 无符号右移a >>> n 总是填充 0,忽略符号位。

2.6 条件运算符(三目运算符)

根据条件返回两个值中的一个。

int result = (a > b) ? a : b; // 若 a > b,返回 a;否则返回 b

注意事项

  • 简洁性:适用于简单条件判断,避免冗长的 if-else 结构。
  • 类型兼容? : 两侧的表达式类型需一致或可隐式转换。

2.7 其他运算符

(1) instanceof 运算符
检查对象是否属于某个类或接口。

if (obj instanceof String) {String str = (String) obj; // 类型转换
}

(2) 数组运算符 []
访问数组元素。

int[] arr = {1, 2, 3};
int value = arr[0]; // 访问第一个元素

(3) 括号 () 和类型转换

  • 强制类型转换int a = (int) 3.14;
  • 优先级控制int result = (5 + 3) * 2;

3. Java运算符优先级(从高到低)

优先级运算符类别示例
1()[].arr[0]obj.method()
2单目运算符(++--!!aa++
3算术运算符(*/%a * b
4算术运算符(+-a + b
5移位运算符(<<>>>>>a << 1
6比较运算符(<>== 等)a > b
7位运算符(&^|a & b
8逻辑运算符(&&||a && b
9条件运算符(? :(a > b) ? a : b
10赋值运算符(=+= 等)a = 5

注意事项

  • 避免歧义:优先级不明确时,使用括号 () 明确执行顺序(如 (a + b) * c)。
  • 结合性
    • 左结合性a + b + c 等价于 (a + b) + c
    • 右结合性:赋值运算符 a = b = c 等价于 a = (b = c)

4. 常见问题与解决方案

Q1: 为什么 5 / 2 的结果是 2 而不是 2.5

  • 原因int / int 的结果仍为 int,小数部分被截断。
  • 解决方案:强制转换为浮点类型(如 5 / 2.0(double) 5 / 2)。

Q2: 自增运算符 ++ii++ 有什么区别?

  • 区别
    • ++i:先自增,再返回值。
    • i++:先返回值,再自增。
  • 示例
    int i = 5;
    System.out.println(++i); // 输出 6
    System.out.println(i++); // 输出 6,然后 i 变为 7
    

Q3: 为什么 a & ba && b 的行为不同?

  • 区别
    • a & b:按位与(对二进制位操作)。
    • a && b:逻辑与(短路运算,仅在左侧为 true 时计算右侧)。
  • 示例
    int a = 5; // 二进制 101
    int b = 3; // 二进制 011
    System.out.println(a & b); // 输出 1(二进制 001)
    

Q4: 如何避免逻辑运算符的短路行为?

  • 解决方案:使用非短路运算符 &|,确保两侧表达式均被计算。

5. 最佳实践

  1. 清晰优先:使用括号 () 明确运算顺序,避免依赖优先级。
  2. 避免复杂表达式:如 a + b * c - d / e,拆分成多行提高可读性。
  3. 类型转换显式化:在涉及不同类型运算时,显式转换以避免意外结果。
  4. 位运算优化性能:在需要高效操作时(如二进制处理),使用位运算符替代算术运算。

6. 总结

运算符类别核心用途典型场景
算术运算符基本数学运算计算数值、自增/自减
赋值运算符变量赋值更新变量值
比较运算符条件判断控制流程(如 ifwhile
逻辑运算符组合布尔表达式复杂条件判断
位运算符二进制位操作高效数据处理、加密算法
条件运算符简化条件赋值替代简单 if-else 结构

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词