JAVA学习笔记_运算符
运算符即对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符以及条件运算符等。
1.算术运算符
1.1基本四则运算符
基本四则运算符:加减乘除模(+ - * / %)
- 做除法和模时,右操作数不能为0
int a = 1;
int b = 0;
System.out.println(a / b)
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero at Test.main(Test.java:5)
- %不仅可以对整型取模,也可以对double型取模。但没有意义
System.out.println(11.5 % 2.0);
// 运行结果
1.5
- 两侧操作数类型不一致时,向类型大的提升
System.out.println(1+0.2);
// +的左侧是int,右侧是double,在加运算之前int被提升为double
//结果为1.2
1.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
1.3自增自减运算符
自增自减运算符:(++ --)
int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); //后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
- 单独使用时,前置++和后置++无任何区别
- 混合使用时,后置++先用再加,前置++先加后用
- 只有变量才能使用自增或自减运算符
2.关系运算符
关系运算符:(== != < > <= >=)其计算结果是 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
3.逻辑运算符
逻辑运算符:(&& || !) 运算结果都是 boolean类型
&&:有假则假,全真为真
||:有真则真,全假为假
!:真变假,假变真
&& 和 || 遵守短路求值的规则:
对于 && , 如果左侧表达式值为 false,则表达式结果一定是 false, 无需计算右侧表达式
对于 ||, 如果左侧表达式值为true, 则表达式结果一定是 true, 无需计算右侧表达式
& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算 但与 && || 相比, 它们不支持短路求值
4.位运算符
位运算符:( & | ~ ^ ) 除 ~ 是一元运算符外,其余都是二元运算符
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据(01序列), 按位运算就是在按照二进制位的每一位依次进行计算
按位与&:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
5.移位运算符
移位运算符(<< >> >>>) 均是二元运算符,都按照二进制比特位进行运算
左移 <<: 最左侧位丢弃, 最右侧补 0
右移 >>: 最右侧位丢弃, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位丢弃, 最左侧位补 0
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方(正数)
- 计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替
- 移动负数位或者移位位数过大都没有意义
- 不存在无符号左移
6.条件运算符
条件运算符(表达式1 ? 表达式2 : 表达式3) 是 Java 中唯一的一个 三目运算符
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值
7.运算符优先级
运算符之间是有优先级的,具体的规则我们不必记忆,在可能存在歧义的代码中加上括号即可。