Study07:运算符
运算符
Java语言支持的运算符如下:
- 算术运算符:+,-,*,/,%(取余/模运算),++(自增),--(自减)
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==(等于),!(不等于)=instanceof
- 逻辑运算符:&&(与),||(或),!(非)
- 位运算符:&,|,^,~,>>,<<,>>>(了解即可)
- 条件运算符:?,:
- 扩展赋值运算符:+=,-=,*=,/=
二元运算符
//二元运算符
int a = 10;
int b = 20;
int c = 30;
int d = 40;
double e1 = a/b; //先运算再转换
double e2 = a/(double)b;//先转换再运算
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b); //0.5 int类型则为0
System.out.println((double) a/b);
System.out.println(e1);
System.out.println(e2);
long a = 600000000000000L;
int b = 123;
short c = 10;
byte d = 8;
double e = 6.6;
double f = 600000000000000L;
System.out.println(a+b+c+d); //Long 存在Long类型则返回Long
System.out.println(b+c+d); //Int 不存在则返回Int
System.out.println(c+d); //Int byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算
//如何判断(c+d)为什么类型,如下所示,强制转换为String类型,报错,查看报错说明
// System.out.println((String)(c+d));
System.out.println(a+b+c+d+e); //Double 存在double类型则返回double类型
System.out.println(f);
自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。类型的大小关系如下:
关系运算符
//关系运算符返回结果: Ture/False 通过布尔值来表示
//常和if一起使用
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(c%a);
一元运算符
//++ -- 自增、自减 一元运算符
int a = 3;
System.out.println(a);
int b = a++; //a++ a = a + 1 先赋值再a+1
System.out.println(a);
int c = ++a; //++a a = a + 1 a先+1再赋值
System.out.println(a);
int d = a--; //a-- a = a - 1 先赋值再a-1
System.out.println(a);
int e = --a; //--a a = a - 1 先赋值再a-1
System.out.println(a);
System.out.println("=======================================================================");
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println("=======================================================================");
//幂运算 2^3 2*2*2 = 8
//工具类Math
double pow1 = Math.pow(2,3);
double pow2 = Math.pow(3,2);
System.out.println(pow1);
System.out.println(pow2);
逻辑运算符
// 与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a && b)); //逻辑与运算(&&):两个变量都为真则为真
System.out.println("a || b:"+(a || b)); //逻辑或运算(||):两个变量有一个为真则为真
System.out.println("! (a && b):"+! (a && b)); //真变假,假变真
System.out.println("===============================================================================");
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4); //前面为假,后面直接就不执行,c++未执行
System.out.println(c);
System.out.println(d);
位运算符
//位运算:
/*
A = 0011 1100
B = 0000 1101
---------------------------------------------------------------------
A & B = 0000 1100
A / B = 0011 1101
A ^ B = 0011 0001(相同则为0)
~B = 1111 0010
---------------------------------------------------------------------
位运算——效率高
2 * 8 = 16 2*2*2*2
<<(左移) 相当于*2
>>(右移) 相当于/2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
//计算机组成原理
*/
System.out.println(2<<1);//2*2
System.out.println(2<<3);//2*2*2*2
System.out.println(3<<3);//3*2*2*2
扩展赋值运算符
//扩展赋值运算符:
int a = 10;
int b = 20;
a += b; //a = a+b
System.out.println(a);
b += a;
System.out.println(b);
a -= b; //a = a-b
b -= a;
System.out.println(a);
System.out.println(b);
字符串连接符
//字符串连接符 + 在+号两侧,只要出现了一个String类型就会转换成String类型
System.out.println(a);
System.out.println(b);
System.out.println(a+b);
System.out.println(""+a+b); //后面的a+b进行拼接
System.out.println(a+b+""); //先进行运算再转换成String类型
三元运算符
// x ? y : z
//如果x==ture,则结果为y,否则结果为z
int score = 88;
String type = score < 60 ? "不及格":"及格"; //必须掌握
//流程控制——if
System.out.println(type);
运算符优先级
优先级 | 运算符 | 简介 | 结合性 |
---|---|---|---|
1 | [ ] 、 . 、( ) |
方法调用,属性获取 | 从左向右 |
2 | !、~、 ++、 -- | 一元运算符 | 从右向左 |
3 | * 、/ 、% | 乘、除、取模(余数) | 从左向右 |
4 | + 、 - | 加减法 | 从左向右 |
5 | <<、 >>、 >>> | 左位移、右位移、无符号右移 | 从左向右 |
6 | < 、<= 、>、 >=、 instanceof | 小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型 | 从左向右 |
7 | == 、!= | 2个值是否相等,2个值是否不等于。 下面有详细的解释 | 从左向右 |
8 | & | 按位与 | 从左向右 |
9 | ^ | 按位异或 | 从左向右 |
10 | | | 按位或 | 从左向右 |
11 | && | 短路与 | 从左向右 |
12 | || | 短路或 | 从左向右 |
13 | ?: | 条件运算符 | 从右向左 |
14 | =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= | 混合赋值运算符 | 从右向左 |