运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
①算数运算符
(前)++:先自增1,后运算
(后)++:先运算,后自增1
(前) - -:先自减1,后运算
(后) - -:先运算,后自减1
②赋值运算符
当“=”两侧数据类型不一致时,可使用自动类型转化或者强制类型转换原则进行处理。支持连续赋值。
拓展赋值运算符:
(1).在开发中如果希望变量实现+2的操作,有以下两种方式:(前提:int num = 10;)
方式一:num = num + 2;
方式二:num += 2;(推荐)
(2).在开发中如果希望变量实现+1的操作,有以下三种方式:(前提:int num = 10;)
方式一:num = num +1;
方式二:num += 1;
方式三:num++;(推荐)
③比较运算符(关系运算符)
比较运算符的结果都是Boolean型,也就是在true和false中二选一
比较运算符在使用时需要注意一个问题,不能将比较运算符“==”不能误写成赋值运算符“=”。
④逻辑运算符
逻辑运算符操作的都是布尔型的变量
区分&和&&
class Test{
public static void main(String [] args){
boolean b1 = true;
b1 = false;
int num1 = 10;
if(b1&(num1++>0)){
System.out.println("我在北极");
}else{
System.out.println("我在南极");
}
System.out.println("num1 = "+ num1);
//******************************
boolean b2 = true;
b2 = false;
int num2 = 10;
if(b2 &&(num2++ > 0)){
System.out.println("我在北极");
}else{
System.out.println("我在南极");
}
System.out.println("num2 = "+ num2);
}
}
总结:
相同点:1.&与&&的运算结果相同。2.当符号左边是true时,二者都会执行符号右边的运算。
不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
区分:|和||
class Test{
public static void main(String [] args){
boolean b3 = true;
b3 = false;
int num3 = 10;
if(b3 | (num3++>0)){
System.out.println("我在北极");
}else{
System.out.println("我在南极");
}
System.out.println("num3 = "+ num3);
//******************************
boolean b4 = true;
b4 = false;
int num4 = 10;
if(b4 || (num4++ > 0)){
System.out.println("我在北极");
}else{
System.out.println("我在南极");
}
System.out.println("num4 = "+ num4);
}
}
总结:
相同点:1. | 与 || 的运算结果相同。2.当符号左边是false,二者都会执行符号右边的运算。
不同点:当符号左边是true时,| 继续执行符号右边的运算。 || 不再执行符号右边的运算。
开发中推荐使用&&和 ||
⑤位运算符(了解即可)
位运算是直接对整数的二进制进行的运算。
结论:位运算符操作的都是整型的数据
<<:在一定范围内,每向左移一位,相当与*2
>>:在一定范围内,每向右移一位,相当于/2
⑥三元运算符
1.结构(结构表达式)?表达式1:表达式2;
2.说明:①条件表达式的结果为Boolean类型
②根据条件表达式为真或假,决定执行表达式1,还是表达式2
如果条件表达式为true,则执行表达式1
如果条件表达式为false,则执行表达式2
③表达式1和表达式2要求是一致的
④三元运算符可以嵌套使用
3. 凡是可以使用三元运算符的地方,都可以改写为if-else。 反之,不成立。
4. 如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。
因为它简洁、执行效率高。
class Test{
public static void main{(String[] args){
//获取两个整数的较大值
int m = 12;
int n = 5;
int max= (m>n)?m:n;
System.out.println(max);
double num = (m > n)?2:10;
n = 12
String maxStr (m>n)?"m大":((m==n)?"m和n相等":"n大");
System.out.println(maxStr);
//*****************************
//获取三个数的最大值
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2)? n1 : n2;
int max2 = (max1 > n3)? max1 : n3;
System.out.println("三个数中的最大值为:" + max2);
//不建议
//int max3 = (((n1 > n2)? n1 : n2) > n3)? ((n1 > n2)? n1 : n2) : n3;
System.out.println("三个数中的最大值为:" + max3);
//该写成if-else:
if(m > n){
System.out.println(m);
}else{
System.out.println(n);
}
}
运算符的优先级
运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序(如图)