运算符
1、算术运算符
- 基本的四则运算符:+ - * / %
- int/int的结果还是int
int a=1;
int b=2;
Syystem.out.println(a/b); //0
//注意这里需要用double来计算
- 0不能做除数
int a=1;
int b=0;
Syystem.out.println(a/b);
//会抛出异常,关于异常分析后续补充
-
%,java中的取余运算可以整数和浮点数运算
System.out.println(11.5%2.0);//1.5
-
增量赋值运算符
=+ -= *= /= %= -
自增、自减运算++和 –
int a=1;
int b=a++;
System.out.println(b); //1
System.out.println(a); //2
int a=1;
int b=++a;
System.out.println(b); //2
System.out.println(a) //2
-
如果不取自增、自减运算后表达式的值,前置和后置自增自减没有区别。
-
如果取表达式的值(返回值),则前置的值是运算后的,后置是运算前的。
-
即后置运算必须在一次操作之后才加一或者减一。
2、关系运算符
== != < > <= >=(注意:复合运算符隐含了强制类型准换)
int a=10;
int b=20;
System.out.println(a!=b); //ture
System.out.println(a>=b); //false
System.out.println(a<b); //true
//注意:关系运算符的表达式返回值都是boolean类型
3、逻辑运算符
&& || !
逻辑运算符的操作数(往往是关系运算符的结果)和返回值都是boolean类型
- 逻辑与&&(两个操作数都为ture则ture)
int a=0;
int b=0;
int c=0;
System.out.println(a>b&&b<c) //false
- 逻辑或|| (两个操作数都为false则false)
- 逻辑非 !(这是一个单目运算符,只有一个操作数)
逻辑与、或支持短路求值
&&和||遵守短路求值的规则
System.out.println(10>20&&10/0==0); //false System.out.println(10<20&&10/0==0); //ture
10/0一旦执行,程序必然抛出异常,但是这个程序正常运行,说明10/0根本没有运行
结论:
- 对于&&,一旦遇到false,则表达式整体一定是false,程序不会再继续运算
- 对于||,一旦遇到ture,则表达式整体一定是ture,程序也不会再往后计算了。
4、位运算
& | ~ ^
- 位操作表示按二进制位运算
- 注意当&和|的操作数位整数的时候表示按位运算,当操作数为boolean的时候,表示逻辑运算,对于浮点数java中有相应的类提供转换,具体后续补充。
5、移位运算
<< >> >>>
左移<<:最左侧丢弃,右侧补零
右移>>:最右侧丢弃,左侧补符号位
无符号右移>>>:最右侧丢弃,左侧补0
注意:
- 对于二进制数,左移N位,相当于原数字乘以2N,右移N位,相当于除以2N
- 计算机做位运算是最快的,所以一个数的扩大或缩小可以借鉴这个技巧
- 移动负数位或者移位位数过大都没有意义。
6、条件运算
三目运算
表达式1?表达式2:表达式3
当表达式1的值为ture,则整个表达式为表达式2的值,当表达式1的值为false,则整个表达式的值为表达式3的值
- 是java中唯一一个三目运算,是条件判断语句的简写
- 用于求最值问题
7、优先级问题
这个在学C初级的时候有过大篇幅的总结,不再赘述,一定记得,优先级和计算顺序并无必然的联系,具体如果怕出错就带()吧