06运算符
Java基础03
运算符
- Java语言支持如下运算符:
- 算术运算符:+,-,*,/,%(取余,模运算),++,--
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=(不等于),instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>(了解!!!)
- 条件运算符:?:
- 扩展运算符:+=,-=,*=,/=
算术运算符
public class Demo01 {
public static void main(String[] args) {
//二元算符
//Ctrl+D :复制当前行到下一行
int a =10;
int b =20;
int c =25;
int d =25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b);//结果为0.5
//System.out.println(a/b);//结果为 0 四舍五入
}
}
- 在除的时候注意数字类型,避免四舍五入导致丢位,小数点后面的部分
public class Demo02 {
public static void main(String[] args) {
long a = 122132132132132L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//Long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
//System.out.println((String)(c+d));//cast 转换
}
}
Ps:
- long类型记得数字后面加L
- int short byte类型相加得到int 只要由long(double)类型参与就为long(double)

- 此图通过将c+d强转为string类型时,提醒不可以将int类型转为string又再一次证明了c+d为int类型
自加自减符号
public class Demo04 {
public static void main(String[] args) {
//++ -- 自增 自减 一元运算符
int a=3;
int b=a++;//执行完这行代码后,先给b赋值,再自增
//b=a
//a=a+1
System.out.println(a);
int c=++a;//执行完这行代码前,先自增,再给b赋值
//a=a+1
//c=a
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算 2^3 2*2*2=8 很多运算,我们会使用一些工具类来操作
double pow= Math.pow(2,3);
System.out.println(pow);
}
}
- ++ -- 自增 自减为一元运算符
- int b=a++;//执行完这行代码后,先给b赋值,再自增
- int c=++a;//执行完这行代码前,先自增,再给b赋值
- 幂运算 2^3 222=8 很多运算,我们会使用一些工具类来操作,例如Math
关系运算符
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果: 正确,错误 布尔值
//if
int a=10;
int b=20;
int c=21;
System.out.println(c%a);//c/a 21/20=2`````1
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
逻辑运算符
- 与(and 交) 或(or 并) 非(取反)
- a && b 逻辑与(交)运算:两个变量都为真,结果才为true
- a || b 逻辑或(并)运算:两个运算有一个为真,则结果才为true
- !(a && b) 如果是真,则变为假,若果是假变为真
//与(and) 或(or) 非(取反)
boolean a=true;
boolean b=false;
System.out.println("a && b:"+(a&&b));//a && b:false //逻辑与(交)运算:两个变量都为真,结果才为true
System.out.println("a || b:"+(a||b));//a || b:true //逻辑或(并)运算:两个运算有一个为真,则结果才为true
System.out.println("!(a && b):"+!(a&&b));//!(a && b):true //如果是真,则变为假,若果是假变为真
- 短路运算
int c=5;
boolean d=(c<4)&&(c++<4);//短路运算:因为c>4所以直接d=false,后面不执行
System.out.println(d);//false
System.out.println(c);//5
注意运算顺序!!!!
int c=5;
boolean d=(c>4)&&(c++>5);//执行顺序 1判断c>4 true 2判断c>5 false -->d=false 3 c=6
System.out.println(d);//false
System.out.println(c);//6
Ps:c++>5 先是执行c>5,在执行c=c+1
位运算
- 举例:
A=0011 1100
B=0000 1101
A&B=0000 1100
A|B=0011 1101
A^B=0011 0001 (异或:不同才为1)
~B=1111 0010
- Q:怎样高效率的计算2*8?
System.out.println(2<<3);
- 左移 右移
<< 左移 *2
>> v右移 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
三元运算符
- x?y:z
- 如果x==true,则结果位y,否则位z
public static void main(String[] args) {
// x?y:z
//如果x==true,则结果位y,否则位z
int score=50;
String type=score <60 ? "不及格":"及格" ;//必须掌握
//if
System.out.println(type);
运算符优先级
-
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单元运算符、三元运算符、赋值运算符具有右结合性。
-
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性。
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、-- | 从右向左 |
| 3 | *、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | «、»、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
- 例题1:
--y || ++x && ++z;
这个表达式中包含了算术运算符和逻辑运算符。根据表 1 中列出的优先级,可以确定它的执行顺序如下:
① 先计算 y 的自减运算符,即 --y。
② 再计算 x 的自增运算符,即 ++x。
③ 接着计算 z 的自增运算符,即 ++z。
④ 由于逻辑与比逻辑或的优先级高,这里将 ② 和 ③ 的结果进行逻辑与运算,即 ++x && ++z。
⑤ 最后将 ④ 的结果与 ① 进行逻辑或运算,即 --y||++x&&++z。
可以通过添加小括号使表达的顺序更加清晰,而不用去查优先级表。如下所示为改进后的表达式。
(--y)||((++x)&&(++z));
- 例题2:
int a = 5;
int b = 4;
int c = a++- --b*++a/b-- >>2%a--;//c=-1
可以通过添加小括号使表达的顺序更加清晰:
int c = ((a++)-((--b)*(++a)/(b--)))>>(2%a--);

浙公网安备 33010602011771号