基本介绍
本文主要对Java中以下运算符进行讲解:赋值运算符、算术运算符、自增自减运算符、比较运算符、逻辑运算符、位运算符、三元运算符。
赋值运算符
赋值运算符用“=”表示,将右边操作数的值赋给左边的操作数,“=”左边必须是变量,“=”右边可以是任何数值或表达式。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
int num01=300;
int num02=400;
int num03=num02-num01;
System.out.println("num01="+num01);
System.out.println("num02="+num02);
System.out.println("num03="+num03);
}
}
运行结果如下图:
算术运算符
算术运算符包括加“+”、减“-”,乘“*”、除“/”、求余“%”,都是二元运算符,其中,加“+”和减“-”可作为正负符号使用。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
int num01=100+200;
int num02=400-300;
int num03=num01+num02;
int num04=num01*num03;
int num05=num01/num03;
int num06=-600;
int num07=+700;
System.out.println("num01="+num01);
System.out.println("num02="+num02);
System.out.println("num03="+num03);
System.out.println("num04="+num04);
System.out.println("num05="+num05);
System.out.println("num06="+num06);
System.out.println("num07="+num07);
}
}
运行结果如下图:
自增自减运算符
自增和自减运算符都是单目运算符,放在操作数的前面或后面都可以,操作数必须是一个整型或浮点型变量,自增或自减运算符若放在操作数前面,会先将变量的值加1或减1,再让该变量参与表达式的运算,自增或自减运算符若放在操作数后面,会先让该变量参与表达式的运算,再将变量的值加1或减1。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
int num01=1;
System.out.println("num01="+num01);
int num02=++num01;
System.out.println("num01="+num01+",num02="+num02);
int num03=num01++;
System.out.println("num01="+num01+",num03="+num03);
int num04=--num01;
System.out.println("num01="+num01+",num04="+num04);
int num05=num01--;
System.out.println("num01="+num01+",num05="+num05);
}
}
运行结果如下图:
比较运算符
比较运算符属于二元运算符,用于变量、常量、各种表达式之间的比较,运算结果是布尔型,比较运算符对应的关系成立时,运算结果为true,不成立时,运算结果为false。
主要有以下比较运算符:
- >:左边是否大于右边;
- <:左边是否小于右边;
- ==:左边是否等于右边;
- >=:左边是否大于等于右边;
- <=:左边是否小于等于右边;
- !=:左边是否不等于右边。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
int num01=1;
int num02=2;
System.out.println("num01>num02:"+(num01>num02));
System.out.println("num01<num02:"+(num01<num02));
System.out.println("num01==num02:"+(num01==num02));
System.out.println("num01>=num02:"+(num01>=num02));
System.out.println("num01<=num02:"+(num01<=num02));
System.out.println("num01!=num02:"+(num01!=num02));
}
}
运行结果如下图:
逻辑运算符
逻辑运算符包括逻辑与(“&&”或“&”)、逻辑或(“||”或“|”)、逻辑非(“!”),返回值为布尔型,操作元也必须是布尔型,相比于比较运算符,逻辑运算符可以表示更加复杂的条件,可以连接多个关系表达式进行运算,在逻辑运算符中,逻辑非(“!”)是一元运算符,其他都是二元运算符。
各逻辑运算符说明:
- 逻辑与(“&&”或“&”):两个表达式都为true时,结果才会为true,否则为false;
- 逻辑或(“||”或“|”):两个表达式只要有一个为true时,结果就会为true,否则为false;
- 逻辑非(“!”):表达式为true时,结果为false,表达式为false时,结果为true。
备注:逻辑运算符“&&”和“&”都表示逻辑与,区别在于,“&”会对两个表达式都进行判断,而“&&”若判断出第一个表达式为false,则不会再判断第二个表达式,因此使用“&&”会提升效率,同样,“||”和“|”的区别也在于此。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
int num01=1;
int num02=2;
System.out.println("((num01>num02)&&(num01<num02)):"+((num01>num02)&&(num01<num02)));
System.out.println("((num01>num02)&(num01<num02)):"+((num01>num02)&(num01<num02)));
System.out.println("((num01<num02)&&(num01<=num02)):"+((num01<num02)&&(num01<=num02)));
System.out.println("((num01<num02)&(num01<=num02)):"+((num01<num02)&(num01<=num02)));
System.out.println("((num01<num02)||(num01>num02)):"+((num01<num02)||(num01>num02)));
System.out.println("((num01<num02)|(num01>num02)):"+((num01<num02)|(num01>num02)));
System.out.println("((num01>num02)||(num01>=num02)):"+((num01>num02)||(num01>=num02)));
System.out.println("((num01>num02)|(num01>=num02)):"+((num01>num02)|(num01>=num02)));
System.out.println("!(num01>num02):"+!(num01>num02));
}
}
运行结果如下图:
位运算符
位运算符用于处理整型和字符型数据,位运算符如下所示:
- 按位与运算(&):是双目运算符,如果两个操作数的对应位都是1,结果才为1,否则为0,若两个操作数的精度不同,则运算结果的精度与精度较高的操作数保持一致。
- 按位或运算(|):是双目运算符,如果两个操作数的对应位都是0,结果才为0,否则为1,若两个操作数的精度不同,则运算结果的精度与精度较高的操作数保持一致。
- 按位非运算(~):是单目运算符,也叫按位取反,将操作数二进制中的1全变为0,并且将0全变为1。
- 按位异或运算(^):是双目运算符,如果两个操作数对应位的二进制表示相同,比如都为1或都为0,则运算结果为0,否则结果为1,若两个操作数的精度不同,则运算结果的精度与精度较高的操作数保持一致。
- 移位运算符:有三种,包括左移运算符(<<)、右移运算符(>>)、无符号右移运算符(>>>),只能对byte、short、int、char、long五种数据类型进行操作。左移运算符(<<)表示将左边操作数在内存中的二进制数据按右边操作数指定的位数进行左移,移空的部分补0。右移运算符(>>)表示将左边操作数在内存中的二进制数据按右边操作数指定的位数进行右移,若最高位是0,则左移空的位就补0,若最高位是1,则左移空的位就补1。无符号右移运算符(>>>)表示将左边操作数在内存中的二进制数据按右边操作数指定的位数进行右移,不论最高位是0还是1,左移空的位都补0。移位能实现让整数乘以或除以2的n次方的效果。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
System.out.println("3&3:"+(3&3));
System.out.println("3|3:"+(3|3));
System.out.println("~3:"+(~3));
System.out.println("~-3:"+(~-3));
System.out.println("24<<1:"+(24<<1));
System.out.println("24>>1:"+(24>>1));
}
}
运行结果如下图:
三元运算符
三元运算符是三目运算符,格式为:操作数1?操作数2:操作数3,有三个操作元,第一个操作元是条件表达式,条件表达式结果为true时,就取第二个操作元的值,条件表达式结果为false时,就取第三个操作元的值。
代码样例展示:
public class TestMainCLass {
public static void main(String[] args) {
System.out.println("【1<2?\"1小于2\":\"1大于2\"】结果为:"+(1<2?"1小于2":"1大于2"));
System.out.println("【1==1?true:false】结果为:"+(1==1?true:false));
}
}
运行结果如下图:
运算符优先级
运算符优先级如下按从高到低排列:
- 括号:();
- 正负号:+、-;
- 一元运算符:++、--、!;
- 乘除和取余:*、/、%;
- 加减:+、-;
- 移位:<<、>>、>>>;
- 比较大小:>、>=、<、<=;
- 比较是否相等或不等:==、!=;
- 按位与:&;
- 按位异或:^;
- 按位或:|;
- 逻辑与:&&;
- 逻辑或:||;
- 三元运算符:?:;
- 赋值运算符:=;
若两个运算的优先级相同,则优先处理左边的表达式。