一、算术运算符
1 . ++ :表示自增
在前:先运算,再取值。
int a = 1;
int b = ++a;
//最后 a = 2; b = 2;
在后:先取值,在运算。
int a = 1;
int b = ++a;
//最后 a = 2; b = 1;
2 . -- :表示自减,跟++一样。
3 . / :除法与数学不太相同,当除数被除数都是整数时,商的小数会被去除。
double d = 10 / 4;
double d2 = 10.0 / 4;
//d的值为2.0,因为10和4都是整数,相除之后也是整数,2.5变成2,然后赋值double为2.0;
//d2的值为2.5
4 . % :取模,在Java中取模的本质为:a % b => a - (int)a / b * b
10 % 3;//结果为1,很显然
-10 % 3;//结果为-1,等价于 -10 - (-10)/ 3 * 3 = -10 - (-3) * 3 = -1;
10 % -3;//结果为1,等价于 10 - 10/ (-3) * (-3) = 10 - (-3) * (-3) = 1;
-10 % -3;//结果为-1,等价于 -10 - (-10)/(-3)*(-3)=-10 - 3 * (-3) = -1;
-10.5 % 3;//结果为-1.5,等于 -10 - (int)(-10.5)/3*3= -10.5 - (-10)/3*3 = -10.5 + 9 = -1.5
5 .i = i++;
int i = 1;
i = i++; //规则为使用临时变量:(1) temp = i;(2)i = i + 1;(3)i = temp; 所以i = 1 => i = 2 => i = 1;
System.out.println(i);
6 .i = ++i;
int i = 1;
i = ++i; //规则为使用临时变量:(1)i = i + 1;(2) temp = i;(3)i = temp; 所以i = 2 => i = 2 ;
System.out.println(i);
二、关系运算符
关系运算符都是返回布尔类型的值,包括 > < == >= <=...,只记录不熟悉的
1 .instanceof:
instanceof是Java中的二元运算符,左边是对象,右边是类;
当对象是右边类或子类所创建对象时,返回true;否则,返回false。
这里说明下:
类的实例包含本身的实例,以及所有直接或间接子类的实例
instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误。
三、逻辑运算符
用于连接多个条件(多个关系表达式),最终结果也是布尔值。
1 .逻辑与& 和
短路与&&:
都是两个条件的都为真时,才为真。
开发中,基本上都是使用短路与&&。
a && b;
a & b;
//当 a 为 false 时,短路与&&不会判断 b 的真假,直接返回假,而逻辑与&还会判断 b 的真假。
例如:
int a = 4;
int b = 5;
if(a < 3 && ++b <50){
System.out.println("OK");
}
System.out.println("b=" + b);
//输出b = 5。因为短路与&&第一个为false的话,不会向后执行第二个条件。
int a = 4;
int b = 5;
if(a < 3 & ++b <50){
System.out.println("OK");
}
System.out.println("b=" + b);
//输出b = 6。因为逻辑与&第一个为false的话,还会向后执行第二个条件。
2 .逻辑或| 和
短路或||:
有一个为真则为真,都为假才假。
区别跟1.中类似,当第一个条件为真时,短路或|| 不会判断第二个条件真假,而逻辑或| 还会判断。
3 .逻辑非!:
取反,条件为真返回假,条件为假返回真。
4 .逻辑异或^:
a ^ b : 逻辑异或,当a和b不同时,结果为true,否则为false。
四、赋值运算符
将某个运算后的值,赋给某个变量。
1 .基本赋值运算符:=
2 .复合赋值运算符:+=,-=,*=,/=,%=。例:a += b; => a = a + b;
3 .运算顺序是
从右向左,即先运算赋值运算符右边的值,再赋值给左边。
4 .赋值运算符左边只能是变量,右边可以是变量,表达式,常量值。
5 .
赋值运算符会进行类型转换:
byte b = 2;
b += 1;//看似等价于b = b + 1;此时,b会被转化成int类型,等式右边是int类型,将int转换为byte会报错。实际等价于 b = (byte)(b+1);
b++;//等价于b = (byte)(b+1);
⭐五、三元运算符
基本语法: 条件表达式 ? 表达式1 :表达式2
条件表达式为true,运算后结果是表达式1;
条件表达式为false,运算后结果是表达式2;
细节:
当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:
1.若果两个操作数不可转换,则不做转换,返回值为Object类型。
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。
4.若两个操作数字都是直接数字。则返回值类型为范围较大者。
![](https://img-blog.csdnimg.cn/direct/db331aecf0424a0fa1aaa4b9e3dfa245.png)
六、运算符优先级
![](https://img-blog.csdnimg.cn/direct/baeee77487084522b9ae153409a97782.png)