Java3:Java运算符详解:编程世界的加减乘除

发布时间:2026/7/6 4:11:33
Java3:Java运算符详解:编程世界的加减乘除 目录写在前面一、运算符是什么二、算术运算符最基础的数学工具2.1 基本四则运算 - * / %2.2 增量运算符 - * / %2.3 自增/自减运算符 --三、关系运算符比较大小的利器四、逻辑运算符条件的组合艺术4.1 逻辑与 4.2 逻辑或 ||4.3 逻辑非 !4.4 短路求值一个聪明的优化五、位运算符深入二进制世界5.1 按位与 5.2 按位或 |5.3 按位取反 ~5.4 按位异或 ^六、移位运算高效的乘除法6.1 左移 6.2 右移 6.3 无符号右移 七、条件运算符简洁的三目运算八、关于优先级的一点忠告总结写在前面在前两篇文章中我们了解了Java的基本数据类型和变量。但光有数据还不够我们还需要一套工具来操作这些数据——这就是运算符。运算符就像是编程世界里的动词告诉计算机要对数据做什么样的操作。今天的文章将系统地梳理Java中的各类运算符并结合实际案例帮助你理解它们的用法和注意事项。学完这一篇你将能写出真正动起来的Java代码。一、运算符是什么简单来说运算符是对操作数进行操作的符号。不同的运算符代表不同的操作含义。int a 10; int b 20; a b; // 是运算符 a b; // 也是运算符Java作为一门功能完备的语言提供了丰富的运算符体系主要包括以下几大类算术运算符关系运算符逻辑运算符位运算符移位运算符条件运算符接下来我们逐一展开。二、算术运算符最基础的数学工具2.1 基本四则运算 - * / %这是我们在数学课上学过的老朋友但在编程中它们有一些特殊规则需要注意。int a 20; int b 10; System.out.println(a b); // 30 System.out.println(a - b); // 10 System.out.println(a * b); // 200 System.out.println(a / b); // 2 System.out.println(a % b); // 0 模运算即取余数几个容易踩坑的地方第一整数除法会向下取整。int a 3; int b 2; System.out.println(a / b); // 输出1而不是1.5这是因为两个整数相除结果仍然是整数小数部分直接被舍弃了。想要得到小数结果可以让其中一个操作数变为浮点数double d a * 1.0 / b; System.out.println(d); // 输出1.5第二除数和模数不能为零。int a 1; int b 0; System.out.println(a / b); // 运行时报错ArithmeticException第三类型不一致时会自动提升。System.out.println(1 0.2); // 输出1.2int被提升为double2.2 增量运算符 - * / %这类运算符的特点是将运算结果直接赋给左边的变量。int a 1; a 2; // 相当于 a a 2 System.out.println(a); // 3 a - 1; // 相当于 a a - 1 System.out.println(a); // 2 a * 3; // 相当于 a a * 3 System.out.println(a); // 6 a / 3; // 相当于 a a / 3 System.out.println(a); // 2 a % 3; // 相当于 a a % 2 System.out.println(a); // 2增量运算符还有一个隐藏优势它会自动完成类型转换不需要手动强转。double d 10.4; int b 10; b d; // 不会报错自动做了类型转换 // b b d; // 这样写反而会报错因为等号右边被提升为double了2.3 自增/自减运算符 --这是Java中使用频率很高的运算符但也是最容易混淆的。int a 1; a; // 后置给a加1此时a2 System.out.println(a); // 先使用a的原始值2再自增所以输出2 System.out.println(a); // 此时a已经是3 a; // 前置给a加1此时a4 System.out.println(a); // 先自增到5再使用所以输出5 System.out.println(a); // 输出5记忆口诀前置先加后用后置先用后加另外要注意只有变量才能使用自增自减常量是不允许的。三、关系运算符比较大小的利器关系运算符共有六个、!、、、、它们的结果都是布尔类型true或false。int a 10; int b 20; System.out.println(a b); // false System.out.println(a ! b); // true System.out.println(a b); // true System.out.println(a b); // false System.out.println(a b); // true System.out.println(a b); // false一个小提醒Java中不能像数学那样连续比较比如3 a 5这种写法是错误的需要用逻辑运算符连接。四、逻辑运算符条件的组合艺术逻辑运算符主要用于组合多个条件判断结果同样是布尔类型。4.1 逻辑与 相当于现实中的且——两个条件都成立结果才为真。表达式1表达式2结果truetruetruetruefalsefalsefalsetruefalsefalsefalsefalseint a 1; int b 2; System.out.println(a 1 b 2); // true System.out.println(a 1 b 100); // false4.2 逻辑或 ||相当于现实中的或——只要有一个条件成立结果就为真。表达式1表达式2结果truetruetruetruefalsetruefalsetruetruefalsefalsefalseSystem.out.println(a 1 || b 2); // true System.out.println(a 100 || b 2); // true System.out.println(a 100 || b 100); // false4.3 逻辑非 !这是一个一元运算符作用是取反——真变假假变真。System.out.println(!(a 1)); // false因为a1是true取反后为false4.4 短路求值一个聪明的优化和||有一个非常重要的特性——短路求值。System.out.println(10 20 10 / 0 0); // 输出false不会抛异常 System.out.println(10 20 || 10 / 0 0); // 输出true不会抛异常按理说10 / 0会抛出异常但上面的代码却能正常运行。原因就在于短路求值对于如果左边为false整个结果已经确定为false右边不再计算对于||如果左边为true整个结果已经确定为true右边不再计算与之对比和|虽然也能做逻辑运算但它们不支持短路求值两边都会计算。五、位运算符深入二进制世界位运算符操作的是数据的二进制位。计算机中所有数据都是以二进制形式存储的理解位运算有助于更深入地理解计算机的工作原理。5.1 按位与 两个二进制位都是1时结果为1否则为0。int a 10; // 二进制1010 int b 20; // 二进制10100 System.out.println(a b);5.2 按位或 |两个二进制位都是0时结果为0否则为1。System.out.println(a | b);5.3 按位取反 ~0变11变0。int a 0xf; // 十六进制相当于二进制1111 System.out.printf(%x\n, ~a);5.4 按位异或 ^两个二进制位相同结果为0不同结果为1。int a 0x1; int b 0x2; System.out.printf(%x\n, a ^ b);一个有趣的性质任何数与自身异或结果都是0。六、移位运算高效的乘除法移位运算操作的是二进制位效率远高于乘除法。6.1 左移 最左侧的位被丢弃最右侧补0。int a 0x10; System.out.printf(%x\n, a 1); // 输出20左移1位相当于乘以2左移N位相当于乘以2的N次方针对正数。6.2 右移 最右侧的位被丢弃最左侧补符号位正数补0负数补1。int a 0x10; System.out.printf(%x\n, a 1); // 输出8右移1位相当于除以2。6.3 无符号右移 最右侧的位被丢弃最左侧补0不考虑符号位。int a 0xffffffff; System.out.printf(%x\n, a 1); // 输出7fffffff七、条件运算符简洁的三目运算条件运算符是Java中唯一的三目运算符格式为表达式1 ? 表达式2 : 表达式3如果表达式1为true取表达式2的值如果表达式1为false取表达式3的值int a 10; int b 20; int max a b ? a : b; // 取较大值 System.out.println(max); // 20使用注意表达式2和表达式3的类型要兼容或者能发生隐式类型转换条件表达式的结果必须被使用不能单独作为一条语句八、关于优先级的一点忠告Java中运算符有优先级之分比如乘除高于加减。但我们不需要死记硬背优先级表格——遇到不确定的情况加括号就行了。// 求a和b的平均值 int a 10; int b 20; // 错误的写法 int c a (b - a) 1; // 因为优先级高于结果不对 // 正确的写法 int c a ((b - a) 1); // 用括号明确顺序括号是程序员最好的朋友它能让代码意图一目了然。总结今天我们一口气学习了Java中的六大类运算符算术运算符 - * / % --关系运算符 ! 逻辑运算符 || !支持短路求值位运算符 | ~ ^移位运算符 条件运算符? :其中算术、关系和逻辑运算符在日常开发中使用频率最高需要熟练掌握位运算和移位运算虽然用得相对少一些但在性能优化和底层开发中很有价值。下一篇文章我们将学习Java中的流程控制语句——if、switch、循环等敬请期待