运算符:就是对常量和变量进行操作的符号。
分类:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符。
算数运算符
算数运算符:+,-,*,/,%,++,--
- +的用法:a.加法 b.正号 c.字符串连接符
- /和%的区别:数据做除法操作的时候,/取得是商,%取得是余数(A:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型,乘1.0或者除以1.0转换成boolean)
- ++和--的用法:a.他们的作用是自增1或者自减 1 b.使用,放在操作数的前面:先自增或者自减,再参与操作,放在操作数的后面:先参与操作,再自增或者自减
赋值运算符
- 赋值运算符:=,+=,-=,*=,/=,%=
- =叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。 - +=,-=,*=,/=,%=,
- int x = 10;int x += 20;//x最后为30 运算方式;1.x+20//10+20=30,2.x=(x+20)//x=30 把左边和右边做+ - * / % 运算然后赋值给左边。
- 扩展的赋值运算符的特点:隐含了自动强制转换。
- int x = 10;int x += 20;//int x += 20;等价于 x = (x的数据类型)(x+20);
比较运算符
- 比较运算符:==,!=,>,>=,<,<=
- 无论运算符两端简单还是复杂最终结果是boolean类型。
逻辑运算符
- 逻辑运算符:&,|,^,!,&&,||
- 逻辑运算符用于连接boolean类型的表达式或者值。(表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子)
- &:有false则false
|:有true则true
^:相同则false,不同则true。情侣关系。
!:非true则false,非false则true(偶数个!不改变本身)
&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。 - 开发中常用的逻辑运算符:&&,||,!
位运算符
- 位运算符:<<(左移),>>(右移),>>>(无符号右移) &,|,^,~
- <<(左移)左边最高位丢弃,右边补齐0,(<< 把<<左边的数据乘以2的移动次幂)
- >>(右移),最高位是0,左边补齐0;最高为是1,左边补齐1(<< 把<<左边的数据除以2的移动次幂)
- >>>(无符号右移),无论最高位是0还是1,左边补齐0
-
- &(位与运算,有0则0),
- |(位或运算有1则1),
- ^(位异或运算相同则0,不同则1),一个数据针对另一个数据位异或两次,该数不变
- ~(按位取反运算,0变1,1变0)
-
- 位运算是直接针对二进制运算
-
*/ class OperatorDemo { public static void main(String[] args) { //&,|,^,~ int a = 3; int b = 4; System.out.println(3 & 4); System.out.println(3 | 4); System.out.println(3 ^ 4); System.out.println(~3); } } /* 分析:因为是位运算,所以我们必须先把数据换算成二进制。 3的二进制:11 00000000 00000000 00000000 00000011 4的二进制:100 00000000 00000000 00000000 00000100 &位与运算:有0则0。 00000000 00000000 00000000 00000011 & 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000000 结果是:0 |位或运算:有1则1。 00000000 00000000 00000000 00000011 | 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000111 结果是:7 ^位异或运算:相同则0,不同则1。 00000000 00000000 00000000 00000011 & 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000111 结果是:7 ~按位取反运算符:0变1,1变0 00000000 00000000 00000000 00000011 ~ 11111111 11111111 11111111 11111100 (补码) 补码:11111111 11111111 11111111 11111100 反码:11111111 11111111 11111111 11111011 原码:10000000 00000000 00000000 00000100 结果是:-4 */
-
class OperatorDemo2 { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a ^ b ^ b); //10 System.out.println(a ^ b ^ a); //20 } }
-
/* 面试题: 请自己实现两个整数变量的交换 */ class OperatorTest { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); //方式1:使用第三方变量(开发中用的) /* int c = a; a = b; b = c; System.out.println("a:"+a+",b:"+b); System.out.println("------------"); */ //方式2:用位异或实现(面试用) //左边:a,b,a //右边:a ^ b /* a = a ^ b; b = a ^ b; //a ^ b ^ b = a a = a ^ b; //a ^ b ^ a = b System.out.println("a:"+a+",b:"+b); */ //方式3:用变量相加的做法 /* a = a + b; //a=30 b = a - b; //b=10 a = a - b; //a=20 System.out.println("a:"+a+",b:"+b); */ //方式4:一句话搞定 b = (a+b) - (a=b); //b=30-20=10,a=20 System.out.println("a:"+a+",b:"+b); } }
三目运算符
- 单目运算符:~3(只有一个操作数)
双目运算符:3 + 4(有两个操作数)
三目运算符:格式:比较表达式?表达式1:表达式2; 比较表达式:结果是一个boolean类型。
执行流程:
根据比较表达式的计算返回一个true或者false。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。 -
class OperatorTest { public static void main(String[] args) { //获取两个整数中的最大值 int x = 100; int y = 200; int max = (x > y? x: y); System.out.println("max:"+max); System.out.println("--------"); //获取三个整数中的最大值 int a = 10; int b = 30; int c = 20; //分两步: //A:先比较a,b的最大值 //B:拿a,b的最大值在和c进行比较 int temp = ((a > b)? a: b); //System.out.println(temp); int max1 = (temp > c? temp: c); System.out.println("max1:"+max1); //一步搞定 //int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c); //这种做法不推荐。 //int max2 = a > b?a > c? a: c:b > c? b: c; //System.out.println("max2:"+max2); System.out.println("--------"); //比较两个整数是否相同 int m = 100; int n = 200; //boolean flag = (m == n)? true: false; boolean flag = (m == n); System.out.println(flag); } }
优先级
描述
运算符
1
括号
()、[]
2
正负号
+、-
3
自增自减,非
++、--、!
4
乘除,取余
*、/、%
5
加减
+、-
6
移位运算
<<、>>、>>>
7
大小关系
>、>=、<、<=
8
相等关系
==、!=
9
按位与
&
10
按位异或
^
11
按位或
|
12
逻辑与
&&
13
逻辑或
||
14
条件运算
?:
15
赋值运算
=、+=、-=、*=、/=、%=
16
位赋值运算
&=、|=、<<=、>>=、>>>=