JAVA20231122
061第三章本章小结
运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
- 算术运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符[需要二进制基础]
- 三元运算符
062063064算数运算符
-
介绍
算术运算符是对数值类型的变量进行运算的,在JAVA程序中使用的非常多
-
常用算数运算符
-
实例演示
-
System.out.println(10 / 4); //从数学来看是 2.5, java 中 2 System.out.println(10.0 / 4); //java 是 2.5 // 注释快捷键 ctrl + /, 再次输入 ctrl + / 取消注释 double d = 10 / 4;//java 中 10 / 4 = 2, 2=>2.0 System.out.println(d);// 是 2.0
JAVA中取模(取余)的本质:
- 在 % 的本质 看一个公式!!! a % b = a - a / b * b
自增、自减的本质(单独使用、作为表达式使用):
-
单独使用
i++和++i均为自增,均等价于i = i + 1
-
作为表达式使用
/* 作为表达式使用 前++:++i 先自增后赋值 后++:i++先赋值后自增 */ int j = 8; //int k = ++j; //等价 j=j+1;k=j; int k = j++; // 等价 k =j;j=j+1; System.out.println("k=" + k + "j=" + j);//8 9
-
经典面试题
-
065066067题
068069关系运算符(比较运算符)
-
介绍
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系表达式经常用在if结构的条件中或在循环结构的条件中
-
常用关系运算符
-
实例演示
//演示关系运算符的使用 public class RelationalOperator { //编写一个 main 方法 public static void main(String[] args) { int a = 9; int b = 8; System.out.println(a > b); //T System.out.println(a >= b); //T System.out.println(a <= b); //F System.out.println(a < b);//F System.out.println(a == b); //F System.out.println(a != b); //T boolean flag = a > b; //T System.out.println("flag=" + flag); } }
-
细节说明
- 关系运算符的结果都是boolean型,也就是要么是true,要么是false
- 关系运算符组成的表达式,我们称为关系表达式 比如:a>b
- 比较运算符"==“不能误写成”="
07071072073逻辑运算符
-
介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值 -
常用逻辑运算符
常见的逻辑运算符包括:&、|、&&、||、!(取反)、^(异或)
说明逻辑运算规则:- a&b:&叫逻辑与:规则:当a和b同时为true,则结果为true,否则为false
- a&&b:&&叫短路与:规则:当a和b同时为true,则结果为true,否则为false
- a|b:|叫逻辑或:规则:当a和b,有一个为true,则结果为true,否则为false
- a||b:||叫短路或:规则:当a和b,有一个为true,则结果为true,否则为false
- !a:叫取反,或者非运算:规则:当a为true,则结果为false,当a为false,则结果为true
- a^b:叫逻辑异或,当a和b不同时,则结果为true,否则为false
-
逻辑&和短路&&的区别
- &&短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false,效率高
- & 逻辑与:不管第一个条件是否为 false,第二个条件都要判断,效率低
- 开发中, 我们使用的基本是使用短路与&&, 效率高
-
逻辑|和短路||的区别
- ||短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true,效率高
- | 逻辑或:不管第一个条件是否为 true,第二个条件都要判断,效率低
- 开发中,我们基本使用 ||
-
取反
名称 语法 特点 !非(取反) !条件 如果条件本身成立,结果为false,否则为true -
逻辑异或
^b: 叫逻辑异或,当 a 和 b 不同时,则结果为 true, 否则为 false举例:System.out.println( (4 < 1) ^ (6 > 3) );//true
-
074题66 65 116 115 50
075076赋值运算符
-
介绍
赋值运算符就是将某个运算后的值,赋给指定的变量 -
分类
-
基本赋值运算符 = int a = 10;
-
复合赋值运算符
+= ,-= ,*= , /= ,%= 等 , 重点讲解一个 += ,其它的使用是一个道理a += b; [等价 a = a + b; ] a -= b; [等价 a = a - b;]
-
-
案例演示
-
赋值基本案例 [int num1 = 10]
-
+= 的使用案例(其中要注意复合赋值运算符会进行类型转换)
//演示赋值运算符的使用 public class AssignOperator { //编写一个 main 方法 public static void main(String[] args) { int n1 = 10; n1 += 4;// n1 = n1 + 4; System.out.println(n1); // 14 n1 /= 3;// n1 = n1 / 3;//4 System.out.println(n1); // 4 //复合赋值运算符会进行类型转换 byte b = 3; b += 2; // 等价 b = (byte)(b + 2); b++; // b = (byte)(b+1); } }
-
-
特点
-
运算顺序从右往左 int num = a + b + c;
-
赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
列如:int num1 = 20; int num2 = 78 * 34 - 10; int num3 = a;
-
复合赋值运算符等价于下面的效果
比如:a+=3;等价于 a=a+3; 其他类推
-
复合赋值运算符会进行类型转换
//复合赋值运算符会进行类型转换 byte b = 3; b += 2; // 等价 b = (byte)(b + 2);//b = b + 2赋给b的值应该为int类型但是底层会进行类型转换使其为b = (byte)(b + 2) b++; // b = (byte)(b+1);
-
077078079三元运算符
-
基本语法
条件表达式 ? 表达式 1: 表达式 2;
运算规则: 1. 如果条件表达式为 true,运算后的结果是表达式 1; 2. 如果条件表达式为 false,运算后的结果是表达式 2;
-
案例演示
//三元运算符使用 public class TernaryOperator { //编写一个 main 方法 public static void main(String[] args) { int a = 10; int b = 99; // 解读 // 1. a > b 为 false // 2. 返回 b--, 先返回 b 的值,然后在 b-1 // 3. 返回的结果是 99 int result = a > b ? a++ : b--; System.out.println("result=" + result);//99 System.out.println("a=" + a);//10 System.out.println("b=" + b);//98 } }
-
使用细节
- 表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动转换)
- 三元运算符可以转成 if–else 语句
int res = a > b ? a++ : --b; if ( a > b) res = a++; else res = --b;
-
课堂练习
案例:实现三个数的最大值public class TernaryOperatorExercise { //编写一个 main 方法 public static void main(String[] args){ //案例:实现三个数的最大值 int n1 = 553; int n2 = 33; int n3 = 123; //思路 //1. 先得到 n1 和 n2 中最大数 , 保存到 max1 //2. 然后再 求出 max1 和 n3 中的最大数,保存到 max2 int max1 = n1 > n2 ? n1 : n2; int max2 = max1 > n3 ? max1 : n3; System.out.println("最大数=" + max2); //使用一条语句实现, 推荐使用上面方法 //提示: 后面我们可以使用更好方法,比如排序 // int max = (n1 > n2 ? n1 : n2) > n3 ? // (n1 > n2 ? n1 : n2) : n3; // System.out.println("最大数=" + max); } }
080运算符的优先级
-
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
-
只有单目运算符、赋值运算符是从右向左运算的。
-
一览表, 不要背,使用多了,就熟悉了