一.简介
java语言支持如下运算符:
-
算术运算符
+,-,*,/,%,++(自增),–(自减)
-
赋值运算符
=
-
扩展赋值运算符
+=,-=,*=,/=
-
关系运算符
<,>=,<=,==,!=
-
逻辑运算符
&,|, &&,||,!,^
-
位运算符
&,|,^,~ , >>,<<,>>> (了解!!!)
-
条件运算符
?:
二.算术运算符
+,-,*,/,%的规则和数学中的规则一样 PS:如果只有整数参与运算,结果也为整数
其中/用来表示两个数相除运算,%用来取余。
System.out.println(12/3); //输出4
System.out.println(12%5); //输出2
++,–,了解一个,另一个含义相同。
++含义:在整型变量的基础上执行+1操作,然后再赋值给此变量
++i(前导自增):先执行自增操作,赋值给自己,再参加其他运算
i++(后导自增):先参加其他运算,再执行自增操作,赋值给自己
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c = ++a; //执行完后,c=5。先自增,再给b赋值
三.赋值运算符
=:赋值号,将赋值号右边的数据,赋值给左边的变量(空间)。注意类型必须要一致或兼容。
四.扩展赋值运算符
扩展赋值运算符又称双目运算符,由算术运算符+赋值运算符组成:
运算符 | 用法举例 | 等效的表达式 |
---|---|---|
+= | a += b | a = a+b |
-= | a -=b | a = a-b |
*= | a *=b | a = a*b |
/= | a /=b | a = a/b |
%= | a %=b | a = a%b |
相较于等效的表达式优缺点:
- 优点:提高执行效率自动做强制类型转换
- 缺点:不直观
五.关系运算符
关系运算符和数学中的含义一致,最终结果一定是布尔值。
< >= <=只能比较byte,short,int ,long ,float,double,char
== != 可以比较任意类型数据
六.逻辑运算符
逻辑运算符:进行逻辑运算的,运算符左右连接的都是 布尔类型的操作数,最终表达式的结果是布尔值:要么 是true,要么false
运算符 | 含义 | 说明 |
---|---|---|
& | 与|且(全真为真,否则为假) | 可做位运算符 |
| | 或(有真为真,否则为假) | 可做位运算符 |
! | 非(真为假,假为真) | |
^ | 异或(相同为假,相异为真) | 可做位运算符 |
&& | 短路与(全真为真,遇假短路) | |
|| | 短路或(全假为假,遇真短路) |
PS:&& || 和 & | 区别
&&和||采用短路方式。从左到右,如果值确定就不会计算下去了。
七.三目条件运算符
语法格式:
x ? y : z
其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算表达式的结果为y,反之为z。
int score = 80; int x = -100;
String type = score < 60 ? "不及格" : "及格";
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);//输出type为及格
System.out.println("flag= "+ flag); //输出flag为-1
八.位运算符(了解)
位运算符:&,|,^,~ , >>,<<,>>>
如何区分逻辑运算符和位运算符:
- 逻辑运算符:左右连接的是布尔类型的操作数
- 位运算符:左右连接的是具体的数值
【1】<< 左移:向左移动第二个操作数个位数,空位补0
3<<2 = 12
面试题: 4乘以8最快的方式: 4<<3
【2】>> 有符号右移:向左移动第二个操作数个位数,移出位置忽略不计,剩下的就为2进制结果
6>>2 = 1
-6>>2 = -2
【3】>>> 无符号右移:该运算符将第一个操作数向右移动指定的位数。右移的多余位将被丢弃。值为零的比特 将从左侧移入。其符号位变为 0
,因此其表示的结果始终为非负数。
6>>>2 = 1
【4】 & 与:对两个操作数统一位置的数据进行运算,一个为0就是0,两个都为1才是1
6&3 = 2
【5】| 或:对两个操作数统一位置的数据进行运算,一个为1就是1,两个都为 0才是 0
6|3=7
【6】^异或:对两个操作数统一位置的数据进行运算,相同为0,不同为1
6^3 = 5
【7】~反:对一个操作数所有位置作取反操作,如果正数取反后记得减1。正数取反为负数,负数取反为正数
~6 = -7
九.运算符总结
十.运算符优先级
不需要刻意的去记优先级关系,赋值<三目<逻辑<关系<算术<单目
实际开发中如果记不得可以用()