运算符
一、常见的运算符
Java 语言支持如下运算符:
- 算术运算符:+,-,*,/,%,++(自增),--(自减)
- 赋值运算符:=
- 扩展赋值运算符:+=,-=,*=,/=
- 关系运算符:>,<,>=,<=,==,!=
- 逻辑运算符:&,|, &&,||,!,^
- 位运算符:&,|,^,~ , >>,<<,>>> (了解!!!)
- 条件运算符:?:
二、算术运算符、
常见的算术运算符有:
- / 除法运算符 : 表示两个数相除运算
- % 取余运算符: 用来求余数的
- + 加法
- 表示正数
- 表示相加操作
- 进行字符串的拼接
- - 减法
- * 乘法
- ++
- --
案例代码如下:
package com.operator; public class Demo01 { //这是主方法main public static void main(String[] args) { //除法 System.out.println(2/4); System.out.println(3.14/2); //求余数 System.out.println(9%5); System.out.println(3.14%2); //加法 System.out.println(4+5); System.out.println(3.14+5); System.out.println("hello"+"world"); //减法 System.out.println(5-6); System.out.println(3.56-12); // ++ int i = 3; //做的就是i=i+1,也就是在加上1重新赋值 i++; System.out.println(i); int a = 3; //做的就是a=a+1 ++a; System.out.println(a); //上面两个案例:++单独使用的时候,无论放在前还是后,都是加1操作 // ++在运算中使用规则:看++在前还是在后,如果++在后:先运算,后加1 如果++在前,先加1,后运算 int m1 = 6; int number1 = m1++ + 3; System.out.println(m1); System.out.println(number1); int m2 = 6; int number2 = ++m2 + 3; System.out.println(number2); // --在运算中使用规则:看--在前还是在后,如果--在后:先运算,后减1 如果--在前,先减1,后运算 int s1 = 5; int number3 = s1-- + 2; System.out.println(s1); System.out.println(number3); int s2 = 5; int number4 = --s2 + 2; System.out.println(s2); System.out.println(number4); } }
三、赋值运算符
- 赋值运算符:=
package com.augus; public class Demo09 { public static void main(String[] args) { // =等号的作用是赋值,以案例演示:交换两个数字 int number1 = 4396; int number2 = 5167; //定义一个中间变量 int t; t = number1; //交换数据 number1 = number2; number2 = t; System.out.println(number1); System.out.println(number2); } }
四、扩展赋值运算符
扩展赋值运算符有:+=,-=,*=,/=
package com.augus; public class Demo10 { public static void main(String[] args) { int num1 = 10; //在定义一个变量,做运算 /*int sum1 = 5; sum1 = sum1+num1; //简写 sum1+=num1 System.out.println(sum1); */ /* int sum2 = 5; sum2 = sum2 - num1; // sum2 -= num1 System.out.println(sum2);*/ /*int sum3 = 5; sum3 = sum3 * num1; // sum3 *= num1 System.out.println(sum3);*/ int sum4 = 50; sum4 = sum4 / num1; // sum4 /= num5 System.out.println(sum4); } }
五、关系运算符
关系运算符:>,<,>=,<=,==,!=
public class Demo11 { public static void main(String[] args) { //关系运算符 System.out.println(5>9); //false System.out.println(5<9); //true System.out.println(5>=9); //false System.out.println(5<=9); //true System.out.println(5==9); //false System.out.println(5!=9); //true System.out.println((5<9)!=(6==8)); //true } }
六、逻辑运算符
逻辑远算符:&、|、 &&、||、!、^
逻辑运算符:进行逻辑运算的,运算符左右连接的都是 布尔类型的操作数,最终表达式的结果是布尔值:要么是true,要么false
package com.augus; public class Demo12 { public static void main(String[] args) { // 逻辑与 :& 只要有一个操作数是false,那么结果一定是false System.out.println(true&true); System.out.println(true&false); System.out.println(false&false); System.out.println((5>4)&(9<8)); // 短路与:&& 只要第一个表达式是false,那么第二个表达式就不用计算了,结果一定是false,计算效率高 System.out.println(true&&true); System.out.println(true&&false); System.out.println((5>4)&&(9<8)); // 逻辑或:| 规律:只要有一个操作数是true,那么结果一定是true System.out.println(true|false); System.out.println((5>4)|(9<8)); // 短路或:|| 效率高一些,只要第一个表达式是true,那么第二个表达式就不用计算了,结果一定是true System.out.println(true||false); System.out.println((5>4)||(9<8)); //逻辑非: ! 取相反结果 System.out.println(!true); System.out.println(!false); //逻辑异或: ^ 两个操作数相同,结果为false,不相同,结果为true System.out.println(true^true); System.out.println(true^false); System.out.println((5>4)^(9<8)); } }
七、条件运算符
条件运算符又称三元运算符
格式:
a?b:c
说明:
- 其中a是一个布尔类型的表达式,返回结果要么是true要么false,通过a的结果决定最终表达式的结果:
- 如果a的结果是true,那么表达式最终结果为b
- 如果a的结果是false,那么表达式最终结果为c
package com.augus; /** * @author : Augus * @date: 2023/5/9 16:17 * @Description: com.augus * @version: 1.0 */ public class Demo13 { public static void main(String[] args) { int number = (5<7)?6:9; System.out.println(number); String str1 = (5!=6)?"yes":"NO"; System.out.println(str1); } }
八、位运算符(了解)
Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。如何区分逻辑运算符和位运算符:
- 逻辑运算符:左右连接的是布尔类型的操作数
- 位运算符:左右连接的是具体的数值
package com.augus; /** * @author : Augus * @date: 2023/5/9 16:36 * @Description: com.augus * @version: 1.0 */ public class Demo14 { public static void main(String[] args) { //将5左移2位: System.out.println(5<<2); /* 运行结果是20,但是程序是怎样执行的呢? 首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位): 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0: 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20 */ //右移( >> ) ,右移同理,只是方向不一样 System.out.println(5>>2); /* 还是先将5转为2进制表示形式: 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0: 0000 0000 0000 0000 0000 0000 0000 0001 换算成10进制为1 */ //无符号右移( >>> ) 分别对5进行右移3位、 -5进行右移3位和无符号右移3位: System.out.println(5>>3); System.out.println(-5>>3); System.out.println(-5>>>3); /* 在Java中int类型占32位,可以表示一个正数,也可以表示一个负数。正数换算成二进制后的最高位为0,负数的二进制最高为为1 例如 -5换算成二进制后为: 1111 1111 1111 1111 1111 1111 1111 1011 5换算成二进制: 0000 0000 0000 0000 0000 0000 0000 0101 5右移3位后结果为0,0的二进制为: 0000 0000 0000 0000 0000 0000 0000 0000 // (用0进行补位) -5换算成二进制: 1111 1111 1111 1111 1111 1111 1111 1011 -5右移3位后结果为-1,-1的二进制为: 1111 1111 1111 1111 1111 1111 1111 1111 // (用1进行补位) -5无符号右移3位后的结果 536870911 换算成二进制: 0001 1111 1111 1111 1111 1111 1111 1111 // (用0进行补位) 综上发现,正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行部位(自然而然的,就由负数变成了正数了) */ //位与( & ) System.out.println(5 & 3);//结果为1 /* 将2个操作数和结果都转换为二进制进行比较: 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0 */ //位或( | ) System.out.println(5 | 3);//结果为7 /* 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111 位或操作:第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0 */ //位异或( ^ ) System.out.println(5 ^ 3);//结果为6 /* 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 ------------------------------------------------------------------------------------- 6转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110 位异或:第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0 */ //位非( ~ ) 位非是一元操作符 System.out.println(~5);//结果为-6 /* 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 ------------------------------------------------------------------------------------- -6转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010 位非:操作数的第n位为1,那么结果的第n位为0,反之。 */ } }
九、远算符的优先级

上面的运算符的优先级关系如下:
- 赋值<三目运算符<逻辑<关系<算术<单目
理解运算符的结合性,实际开发中我们不会写特别复杂的表达式,想先算谁就用()即可

浙公网安备 33010602011771号