运算符
算术运算符
基本四则运算符:+ - * / %(这里只讨论 / 和 %)
" / " 举例:
System.out.println(5/2);
System.out.println(5.0/2);
System.out.println((float)5/2);
System.out.println((float)(5/2));
结论:
- 若 / 左右两边都是整型,即:int / int,则输出结果也为int
- / 两边,其中一个是小数,那么结果就有小数
- 除数不能为0,否则会出现异常
" % " 举例:
System.out.println(10%3);
System.out.println(-10%3);
System.out.println(10%-3);
System.out.println(-10%-3);
System.out.println(11.5%2.0);
结论:
- % 表示取余,不仅对 int 可以取模,对double也可以
复合运算符
增值赋值运算符:
+= : a+=1 → a=a+1 - = : a- =1 → a=a-1 *= : a *=2 → a=a * 2 / =: a /=2 → a=a */ 2
自增运算符:++ –
int a=5;
int b=++a;
int a=5;
int c=a++;
int i=10;
i=i++;
结论:
- 若不取自增运算符的表达式的返回值,则前置++和后置++没区别
- 若取自增运算符的表达式的返回值,前置++的返回值是自增之后的值,后置++的返回值是自增之前的值
关系运算符
关系运算符主要有6个: == != < > <= >=
int a=10;
int b=20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a<b);
System.out.println(a>b);
System.out.println(a<=b);
System.out.println(a>=b);
注意:
- 关系运算符的返回值都是boolean类型
- 关系运算符的表达式的结果只有两个值:true或者是false
逻辑运算符
逻辑运算符主要有三个:&& || !
逻辑与 &&
两个表达式都为true,结果为true,否则结果为false
int a=1;
int b=2;
int c=3;
System.out.println(a<b && b<c);
结果为: true
逻辑或 ||
两个表达式都为false,结果为false,否则结果为true
int a=1;
int b=2;
int c=3;
System.out.println(a<b || b<c);
结果为: true
逻辑非 !
表达式为false,结果为true;表达式为true,结果为false Java中, " ! "只能作用于boolean类型
int a=1;
int b=2;
System.out.println(!a<b);
上述代码错误!!
改正:
System.out.println(!(a<b));
短路求值
&& 和 || 遵循短路求值原则
System.out.println( 10>20 && 10/0==0 );
System.out.println( 10<20 || 10/0==0 );
结论:
- 对于&&,若左侧表达式为false,则结果一定为false,无需考虑右侧表达式
- 对于| |,若左侧表达式为true,则结果一定为true,无需考虑右侧表达式
- & 和 | (不推荐使用) ,若表达式结果为boolean时,也表示逻辑运算,但它不支持短路求值
System.out.println( 10>20 & 10/0==0 ); 程序异常
System.out.println( 10<20 | 10/0==0 ); 程序异常
位运算符
位运算符主要有4个:& | ~ ^
要想进行位运算,先得求出一个数的二进制:
按位与 &
若两个二进制位都为1,结果为1,否则为0
按位或 |
若两个二进制位都为0,结果为0,否则为1
按位取反 ~
若该位为0,则结果为1,若该位为1,则结果为0
按位异或 ^
如果两个数的二进制位相同,结果为 0, 相异结果为 1
注意:
- 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候,表示按位运算,当操作数为 boolean 的时候,表示逻辑运算
- 0x 前缀的数字为 十六进制 数字,十六进制可以看成是二进制的简化表示方式,一个十六进制数字对应 4 个二进制位.
- printf 能够格式化输出内容,%x 表示按照十六进制输出
移位运算符
移位运算符有三个:<<,>>,>>>,都是按照二进制比特位来进行运算的
左移 <<
最左侧位不要了,最右侧补0 左移补0就行
右移 >>
最右侧位不要了,最左侧补符号位,右移补符号位
无符号右移 >>>
Java中独特的移位运算符 最右侧位不要了,最左侧补0,只补0
结论:
- 左移相当于乘法,左移 N 位,相当于原数字 * 2 的N次方
- 右移相当于除法,右移 N 位,相当于原数字 / 2 的N次方
- 移动负数位或者移位位数过大都没有意义
- 位运算速度高于乘除运算
条件运算符
Java 中唯一的一个三目运算符,是条件判断语句的简化写法 表达式1 ? 表达式2 :表达式3 a ? b : c 当 a 的值为 true 时,整个表达式的值为 b 的值; 当 b 的值为 false 时,整个表达式的值为 c 的值
int a = 10;
int b = 20;
int max = a>b ? a : b;
注意:
- 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
- 表达式不能单独存在,其产生的结果必须要被使用
运算符优先级
运算符之间是有优先级的,具体的顺序规则我们不用记, 在写代码时,加括号即可
总结:
Java的运算符的基本规则和C语言的基本一致
|