算术运算符
关系运算符
逻辑运算符
字符串连接运算符
三元运算符
赋值类运算符
1.算术运算符:
+相加,-相减,*乘积,/商,%求余数,++自加1,–自减1
运算符有优先级,不确定的话就加小括号
int a=10;
int b=a++; //先赋值,再加1运算
System.out.println(b); //b=10,a=11
int c=20;
int d=++c; //先加1,再赋值
System.out.println(d); //d是21,c是21
2.关系运算符:
>大于, >=大于等于, <小于, <=小于等于, ==等于, !=不等于
(=是赋值运算符)
关系运算符的运算结果一定是布尔类型true
或false
比较的是变量中保存的值
3.逻辑(布尔)运算符:
&逻辑与 ,|逻辑或 ,!逻辑非, ^逻辑异或(两边的算子只要不一样结果就是真),
&&短路与 ,||短路或 (与逻辑与,逻辑或运算结果一样,只是在短路情况不同)
要求两边的算子必须是布尔类型
,并且逻辑运算符最终的运算结果也是一个布尔类型
短路与和逻辑与最终的运算结果相同,只不过短路与存在短路现象
短路或和逻辑或最终的运算结果相同,只不过短路或存在短路现象
什么时候发生短路现象?
第一个表达式执行结果是true
,发生短路或
第一个表达式结果是false
,发生短路与
什么时候用逻辑与?什么时候用短路与?
从某角度来说短路与更智能。由于后面的表达式可能不执行,所以执行的效率更高。在开发中,短路与比逻辑与更常用
如果希望两个表达式都一定能执行,就选择逻辑与
4.赋值类运算符
基本的赋值运算符 =
扩展的赋值运算符 += -= *= /= %=
先执行等号右边的表达式,将执行结果赋给左边的变量
i+=5 等同于 i=(类型转换)(i+5) 会自动进行类型转换
byte b=10;
b=b+5; //会发生编译错误,因为等号左边的b+5运算中 已经自动化为int型,int不能和byte赋值(之前有例子提过)
但是
byte b=10;
b+=5;就可以编译通过
byte z=0;
z+=128; 输出的z是-128 可以编译成功但是会损失精度
扩展类的赋值运算符不会改变运算结果类型,但是有可能会损失精度
5.字符串连接运算符
关于‘+’运算符:
加法运算,求和
字符串的连接运算
当+两边都是数字
,就是加法运算
当+两边只要有一个是字符串
,就是字符串连接运算
,而且连接结果还是字符串类型
(没有小括号)自左向右依次运算
6.三元(条件)运算符
语法规则:
布尔表达式?表达式1:表达式2
如果是真就选表达式1,假就选表达式2作为整个表达式的执行结果。
他是一个运算符
,最后的结果是一个字符值
,而不是一个完整的java语句
boolean sex =false;
char c=(sex?'男':'女');
System.out.println(c) ; //可以输出
//char c1=(sex?"male":'女'); //编译报错,不行,因为结果有可能是string类型也可能是char类型,string类型不能赋值给char类型变量
System.out.println(sex ? "male" : '女'); //可以编译