Java语言的运算符之一
Java语言的运算符详细解析之二
逻辑运算符
-
&& 表示逻辑与运算符,相当于"并且",同真为真,一假为假。
-
|| 表示逻辑或运算符,相当于"或者",一真为真,同假为假。
-
! 表示逻辑非运算符,相当于"取反",真为假,假为真。
-
注意事项
逻辑运算符的操作数均为boolean表达式。
-
逻辑运算符的图解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cVY9j3Iv-1625167254255)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210701031459412.png)]
-
逻辑运算符的短路特性
- 对于逻辑与运算符来说,若第一个表达式为假则结果为假,此时跳过第 二个表达式;
- 对于逻辑或运算符来说,若第一个表达式为真则结果为真,此时跳过第 二个表达式;
-
代码演示
/* 编程实现逻辑运算符的使用 */ public class LogicTest { public static void main(String[] args) { // 1.声明两个boolean类型的变量并初始化 boolean b1 = true; boolean b2 = false; // 2.打印变量的数值 System.out.println("b1 = " + b1); // b1 = true System.out.println("b2 = " + b2); // b2 = false System.out.println("---------------------------------------------"); // 3.使用上述变量实现逻辑运算符的使用 boolean b3 = b1 && b2; System.out.println("b3 = " + b3); // false System.out.println(b1 && b2); // false 并且 System.out.println(b1 || b2); // true 或者 System.out.println(!b1); // false 取反 System.out.println(!b2); // true System.out.println("---------------------------------------------"); // 4.测试一下短路特性 int ia = 3; int ib = 5; // 对于逻辑与运算符来说,若第一个条件为假则整个表达式为假,此时跳过第二个表达式不执行 boolean b4 = (++ia == 3) && (++ib == 5); System.out.println("b4 = " + b4); // false System.out.println("ia = " + ia); // 4 System.out.println("ib = " + ib); // 5 // 对于逻辑或运算符来说,若第一个条件为真则整个表达式为真,此时跳过第二个表达式不执行 boolean b5 = (++ia == 5) || (++ib == 5); System.out.println("b5 = " + b5); // true System.out.println("ia = " + ia); // 5 System.out.println("ib = " + ib); // 5 } }
条件/三目运算符
-
语法结构
条件表达式? 表达式1: 表达式2
-
语法解析
判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2
-
代码演示
/* 编程使用三目运算符查找最大值 */ import java.util.Scanner; public class ThreeEyeTest { public static void main(String[] args) { // 1.提示用户输入两个整数并使用变量记录 System.out.println("请输入两个整数:"); Scanner sc = new Scanner(System.in); int ia = sc.nextInt(); int ib = sc.nextInt(); // 2.使用三目运算符找到最大值并打印 int max = ia > ib? ia: ib; System.out.println("最大值是:" + max); System.out.println("最大值是:" + (ia > ib? ia: ib)); } }
赋值运算符
-
简单赋值运算符
= 表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖变量 原来的数值
-
复合赋值运算符
+=、 -= 、 *= 、 /=、 …
-
代码演示
/* 赋值运算符的使用 */ public class AssignTest { public static void main(String[] args) { // 1.声明一个int类型的变量并初始化 int ia = 3; // 2.打印变量的数值 System.out.println("ia = " + ia); // ia = 3 System.out.println("-----------------------------------"); // 3.简单赋值运算符的使用 // 表示将数据5赋值给变量ia并且覆盖变量ia原来的数值 ia = 5; System.out.println("ia = " + ia); // ia = 5 // 下面的代码是在打印表达式的结果 System.out.println( ia = 5 ); // 5 System.out.println("ia = " + ia); // ia = 5 int ib = ia = 6; System.out.println("ia = " + ia); // ia = 6 System.out.println("ib = " + ib); // ib = 6 System.out.println("-----------------------------------"); // 4.复合赋值运算符的使用 //ia = ia + 2; ia += 2; // 简化写法,从结果上来看是等价的 System.out.println("ia = " + ia); // ia = 10 System.out.println("-----------------------------------"); // 5.笔试考点1 byte b1 = 10; System.out.println("b1 = " + b1); // b1 = 10 //b1 = b1 + 2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失 byte + int 相加结果还是int类型 //b1 = b1 + (byte)2; // 错误: 不兼容的类型: 从int转换到byte可能会有损失 byte + byte 相加结果还是int类型 编译器优化 //b1 = (byte)(b1 + 2); // 强制类型转换,将int类型转换为byte b1 += 2; // 真正等价于b1 = (byte)(b1 + 2); System.out.println("b1 = " + b1); // b1 = 12 System.out.println("-----------------------------------"); // 6.笔试考点2 //ia == 2; - 表示判断变量ia的数值是否等于2 //2 == ia; - 表示判断2是否等于变量ia的数值,从结果上来说等价,推荐该方式 //ia = 2; - 表示将2赋值给变量ia,覆盖变量ia原来的数值 //2 = ia; //- 编译报错 错误: 意外的类型 } }
移位运算符(了解)
-
<< 左移运算符,用于将数据的二进制位向左移动,右边使用0补充
-
>> 右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充
-
>>> 表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0 补充
-
代码演示
/* 编程实现移位运算符的使用 */ public class MoveBitTest { public static void main(String[] args) { // 1.声明一个byte类型的变量并初始化 byte b1 = 13; // 2.打印变量的数值 System.out.println("b1 = " + b1); // b1 = 13 System.out.println("---------------------------------------------------"); // 3.移位运算符的使用 // 13的二进制是:... 0000 1101 => 左移1位的结果是:... 0001 1010 => 换算为十进制整数是:26 //byte b2 = b1 << 1; // 错误: 不兼容的类型: 从int转换到byte可能会有损失 自动提升为int类型,也就是32位二进制 byte b2 = (byte)(b1 << 1); System.out.println("b2 = " + b2); // 26 System.out.println(b1 << 1); // 26 左移1位相当于当前整数的数值*2 System.out.println(b1 << 2); // 52 左移2位相当于当前整数的数值*4 System.out.println("---------------------------------------------------"); // 13的二进制是:... 0000 1101 => 右移1位的结果是:... 0000 0110 => 换算为十进制整数是:6 System.out.println(b1 >> 1); // 6 右移1位相当于当前整数的数值/2 System.out.println(b1 >> 2); // 3 右移2位相当于当前整数的数值/4 System.out.println("---------------------------------------------------"); // 逻辑右移 对于非负数来说,逻辑右移和右移的效果一致 System.out.println(b1 >>> 2); // 3 } }
位运算符(了解)
-
& 表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0
-
| 表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0
-
~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.
-
^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1
-
代码演示
/* 编程实现位运算符的使用 */ public class BitTest { public static void main(String[] args) { // 1.声明两个byte类型的变量并初始化 byte b1 = 11; byte b2 = 13; // 2.打印变量的数值 System.out.println("b1 = " + b1); // b1 = 11 System.out.println("b2 = " + b2); // b2 = 13 System.out.println("---------------------------------------------------"); // 3.实现位运算符的使用 // b1的二进制为: 0000 1011 // b2的二进制为: 0000 1101 System.out.println( b1 & b2); // 按位与:同1为1,一0为0 按位与后的二进制为:0000 1001 => 转为十进制是:9 System.out.println( b1 | b2); // 按位或:一1为1,同0为0 按位或后的二进制为:0000 1111 => 转为十进制是:15 System.out.println( b1 ^ b2); // 按位异或:相同为0,不同为1 按位异或的二进制为:0000 0110 => 转为十进制是:6 System.out.println( ~ b1); // 按位取反:1为0,0为1 按位取反的二进制为:1111 0100 // 二进制1111 0100转为十进制 => 先减1: 1111 0011 => 按位取反:0000 1100 => 转为十进制:12 => 添加负号:-12 } }
运算符的优先级
-
运算符的优先级图(无需全部记忆)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XJZcG6P-1625167254258)(C:\Users\Administrator\Desktop\模块一 Java编程基础\03任务三 运算符\02_图片\02运算符的优先级.png)]
-
运算符的优先级总结
- ()的优先级极高
- =的优先级极低
- 若无法确认优先级,则使用()来确保即可