目录
一、算术运算符
1. 基本四则运算符:加减乘除模(+ - * / %)
2. 增量运算符 += -= *= /= %=
3. 自增/自减运算符 ++ --
二、 关系运算符 == != < > <= >=
三、 逻辑运算符
1. 逻辑与 &&
2. 逻辑或 ||
3. 逻辑非 !
四、位运算符
1. 按位与 &
2. 按位或 |
3. 按位取反 ~
4. 按位异或 ^
五、移位运算
1. 左移 <<
2. 右移 >>
3. 无符号右移 >>>
六、条件运算符(表达式1 ? 表达式2 : 表达式3)
七、 运算符的优先级
注意:
1)都是二元运算符,使用时必须左右有两个数。
int a = 20 ;int b = 10 ;System . out . println ( a + b ); // 30System . out . println ( a - b ); // 10System . out . println ( a * b ); // 200System . out . println ( a / b ); // 2System . out . println ( a % b ); // 0
int a = 3 ;int b = 2 ;// 在数学中应该是 1.5 但是在 Java 中输出结果为 1 会向下取整,即小数点之后全部舍弃掉了System . out . println ( a / b );// 如果要得到数学中的结果,可以使用如下方式double d = a * 1.0 / b ;System . out . println ( d );
3) 做除法和取模时,右操作数不能为0
int a = 1 ;int b = 0 ;System . out . println ( a / b )//运行结果(错误)Exception in thread "main" java . lang . ArithmeticException : / by zeroat Test . main ( Test . java : 5 )
4)% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
System . out . println ( 11.5 % 2.0 );// 运行结果1.5
System.out.println(7%3);//1 System.out.println(7%-3);//1 System.out.println(-7%3);//-1 System.out.println(-7%-3);//-1
System . out . println ( 1 + 0.2 ); // +的左侧默认是int,右侧默认是double,在加之前int被提升为 double// 故:输出 1.2
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数。
int a = 1 ;a += 2 ; // 相当于 a = a + 2System . out . println ( a ); // 输出 3a -= 1 ; // 相当于 a = a - 1System . out . println ( a ); // 输出 2a *= 3 ; // 相当于 a = a * 3System . out . println ( a ); // 输出 6a /= 3 ; // 相当于 a = a / 3System . out . println ( a ); // 输出 2a %= 3 ; // 相当于 a = a % 2System . out . println ( a ); // 输出 2
++是给变量的值+1,--是给变量的值-1。
int a = 1 ;// 后置++a ++ ; // 后置 ++单独使用 表示给 a 的值加 1 ,此时 a 的值为 2System . out . println ( a ++ ); // 注意:后置 ++混合使用 是先使用变量原来值,表示式结束时给变量 +1 ,因此输出 2System . out . println ( a ); // 输出 3// 前置 ++++ a ; // 前置 ++单独使用 表示给 a 的值加 1,a=4System . out . println ( ++ a ); // 前置 ++混合使用 是先给变量 +1 ,然后使用变量中的值,因此输出 5System . out . println ( a ); // 输出 5// -- 操作符给操作 -1 ,与 ++ 含义类似
关系运算符主要有六个: == != < > <= >= ,其计算结果是 true 或者 false 。
int a = 10 ;int b = 20 ;// 注意:在 Java 中 = 表示赋值,要与数学中的含义区分// 在 Java 中 == 表示相等System . out . println ( a == b ); // falseSystem . out . println ( a != b ); // trueSystem . out . println ( a < b ); // trueSystem . out . println ( a > b ); // falseSystem . out . println ( a <= b ); // trueSystem . out . println ( a >= b ); // false
注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的
int a = 1 ;int b = 2 ;System . out . println ( a == 1 && b == 2 ); // 左为真 且 右为真 则结果为真,打印trueSystem . out . println ( a == 1 && b > 100 ); // 左为真 但 右为假 则结果为假,打印falseSystem . out . println ( a > 100 && b == 2 ); // 左为假 但 右为真 则结果为假,打印falseSystem . out . println ( a > 100 && b > 100 ); // 左为假 且 右为假 则结果为假,打印false
补充:
逻辑与又叫短路与,遵守短路求值的规则,当表达式1为假时,此时结果一定为假,则表达式2的真假不会去判断,所以当表达式2非法时,也不会报错。
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false,不会报错!
//我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
int a = 1 ;int b = 2 ;System . out . println ( a == 1 || b == 2 ); // 左为真 且 右为真 则结果为真System . out . println ( a == 1 || b > 100 ); // 左为真 但 右为假 则结果也为真System . out . println ( a > 100 || b == 2 ); // 左为假 但 右为真 则结果也为真System . out . println ( a > 100 || b > 100 ); // 左为假 且 右为假 则结果为假
补充:
逻辑或又叫短路或,遵守短路求值的规则,当表达式1为真时,此时结果一定为真,则表达式2的真假不会去判断,所以当表达式2非法时,也不会报错。
System . out . println ( 10 < 20 || 10 / 0 == 0 ); // 打印true,不会报错!//我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
语法规则:! 表达式 (boolean类型)
真变假,假变真。
int a = 1 ;System . out . println ( ! ( a == 1 )); // a == 1 为 true ,取个非就是 falseSystem . out . println ( ! ( a != 1 )); // a != 1 为 false ,取个非就是 true
语法规则:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
例:
int a = 10 ;int b = 20 ;System . out . println ( a & b ); //结果输出为0
语法规则: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
例:
int a = 10 ;int b = 20 ;System . out . println ( a | b ); //输出结果为30
System . out . println ( 10 > 20 & 10 / 0 == 0 ); // 程序抛出异常System . out . println ( 10 < 20 | 10 / 0 == 0 ); // 程序抛出异常
System . out . println ( a == 1 & b == 2 ); //与&&含义相同System . out . println ( a == 1 | b == 2 ); //与||含义相同
语法规则: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
int a = 0xf ;System . out . printf ( "%x\n" , ~a );//输出结果为0xfffffff0
int a = 0x1 ; //00000001int b = 0x2 ; //00000010System . out . printf ( "%x\n" , a ^ b ); //输出结果为3
注意:如果两个数相同,则异或的结果为0
移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的。
int a = 0x10 ; //表示十进制的16,二进制表示为00010000System . out . printf ( "%x\n" , a << 1 );// 运行结果(注意, 是按十六进制打印的) 20
语法规则: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
int a = 0x10 ; //表示十进制的16,二进制表示为00010000System . out . printf ( "%x\n" , a >> 1 );// 运行结果 ( 注意 , 是按十六进制打印的 ) 8int b = 0xffff0000 ;System . out . printf ( "%x\n" , b >> 1 );// 运行结果(注意, 是按十六进制打印的) ffff8000
语法规则: 最右侧位不要了, 最左侧补 0.
int a = 0xffffffff ;System . out . printf ( "%x\n" , a >>> 1 );// 运行结果(注意, 是按十六进制打印的) 7fffffff
注意: (一般情况下)
表达式 1 ? 表达式 2 : 表达式 3
// 求两个整数的最大值int a = 10 ;int b = 20 ;int max = a > b ? a : b ;
注意:
1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
int a = 10 ;int b = 20 ;int c = a > b ? 1 : 2.0 ; //错误
2. 表达式不能单独存在,其产生的结果必须要被使用
int a = 10 ;int b = 20 ;a > b ? a : b ; // 报错: Error:(15, 14) java: 不是语句
下述代码的结果为?
boolean flag = true == true ? true : true == false ? false : false;
// ①为真 ②
boolean flag1 = true == false ? true : true == false ? false : false;
// ①为假 ②为假 ③
// 求 a 和 b 的平均值int a = 10 ;int b = 20 ;int c = a + ( b - a ) >> 1 ;System . out . println ( c ); //输出结果为10
//改正// 求 a 和 b 的平均值int a = 10 ;int b = 20 ;int c = a + (( b - a ) >> 1 );System . out . println ( c );
这次的分享就到这里,谢谢大家的点赞支持!!!