运算符是一些特殊的符号,主要用于数学计算、逻辑比较等方面。
一:赋值运算符
赋值运算符是以“=”表示,是一个二元运算符;它是指把右边操作数所含的值赋给左边的操作数。左边的操作数必须是一个变量,而右边的操作数可以是任何表达式,如变量(a、b)、常量(111,“book”)、有效的表达式(23+12)。
我们知道,赋值运算符首先是处理右边表达式,获取右边表达式的结果后,再赋值给左边操作数,如果一个表达式有两个“=”,那么会从最右边的“=”开始处理。
public static void FzYsf(){
int a = 10; //声明int型变量a
int b,c;
b = 20; //将20赋值给变量b
c = b = a+4; //将a+4的和赋值给变量b,然后再赋值给变量c
System.out.println("b="+b); //输出b=14
System.out.println("c="+c); //输出c=14
}
二:算术运算符
所谓的算术运算符,就是指加(+)、减(-)、乘(*)、除(/)、取余(%),这些都是二元运算符,其中+和-可以表示数字的正负号,如+5、-9。
注意:当进行除法(/)运算时,0不能作为除数,即8/0这样是错误的,会抛出运算条件(ArithmeticException)异常。
public static void arith(){
int i = 4;
int num = 22;
System.out.println("num+i= "+(num+i)); //输出num+i= 26
System.out.println("num*i= "+(num*i)); //输出num*i= 88
System.out.println("num-i= "+(num-i)); //输出num-i= 18
System.out.println("num/i= "+(num/i)); //输出num/i= 5 取整数
System.out.println("num%i= "+(num%i)); //输出num%i= 2 取余数
}
三:自增和自减运算符
自增和自减运算符是单目运算符,可以放在变量前面,也可以放在变量后面,这个变量就是你要操作的操作元;自增是使变量的值加1,自减是使变量的值减1,放在变量前面的意思是:先将该变量的值加1或减1,然后再让该变量参与运算;放在变量后面的意思是:先让该变量参与运算,然后再将该变量的值加1或减1。
注意:变量必须是整型或浮点型的。
public static void cNum(){
int a = 1;
int b = a++ + 2;
int c = ++a + 5;
int d = a-- + b;
int f = --a + 3;
System.out.println("b= "+b);//3
System.out.println("c= "+c);//8
System.out.println("d= "+d);//6
System.out.println("f= "+f);//4
}
上述代码中,可以看到,b=a++ +2;可以得知b计算后的值为3,a计算后的值为2;然后c=++a +5;a先自增运算值为3,然后加上5,可以得到c的值为8;d = a-- + b;上面运算之后b=3,然后先与a--进行运算,得到d=6,然后a进行自减运算值为2;f = --a + 3,--a先进行自减得到a为1,然后与3进行运算得到f=4。
四:比较运算符
比较运算符也属于二元运算符,用于变量之间、变量和自变量之间及其他类型之间的比较,比较运算符的运行结果是boolean类型的,当运算符对应的关系成立时,返回true,否则返回false。比较运算符一般用于条件语句中。
运算符 | 作用 | 例子 | 操作数据类型 | 结果 |
> | 比较左边是否大于右边 | 'a' > 'b' | 整型、浮点型、字符型 | false |
< | 比较左边是否小于右边 | 123<124 | 整型、浮点型、字符型 | true |
== | 比较左边是否等于右边 | 'd' = 'd' | 基本数据类型、引用型 | true |
>= | 比较左边是否大于等于右边 | 89 >= 90 | 整型、浮点型、字符型 | false |
<= | 比较左边是否小于等于右边 | 90.234 <= 120.67 | 整型、浮点型、字符型 | true |
!= | 比较左边是否不等于右边 | ‘y’ != 'x' | 基本数据类型、引用型 | true |
public static void compare(){
float n1 = 21.3f;
float n2 = 34.23f;
System.out.println("n1>n2= "+(n1>n2)); //false
System.out.println("n1<n2= "+(n1<n2)); //true
System.out.println("n1==n2= "+(n1==n2)); //false
System.out.println("n1>=n2= "+(n1>=n2)); //false
System.out.println("n1<=n2= "+(n1<=n2)); //true
System.out.println("n1!=n2= "+(n1!=n2)); //true
}
五:逻辑运算符
逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非),逻辑运算符的操作元必须是boolean类型的,而且除了!是一元运算符,其他都是二元运算符。
运算符 | 含义 | 举例 | 结合方向 |
& && | 逻辑与 | p1 && p2 | 从左到右 |
|| | 逻辑或 | p1 || p2 | 从左到右 |
! | 逻辑非 | ! p1 | 从右到左 |
表达式1 | 表达式2 | 表达式1 && 表达式2 | 表达式1 || 表达式2 | ! 表达式1 |
true | true | true | true | false |
true | false | false | true | false |
false | false | false | false | true |
false | true | false | true | true |
&与&&的区别:
使用&会判断两个表达式是否都满足,使用&&会先判断第一个表达式,当第一个表达式为false时,就不会去判断第二个了,这种从左边的表达式就能推断出整个表达式值得称为“短路”运算符。
public static void calculation(){
int a = 2;
int b = 3;
boolean i = (a>b) && (a!=b);
boolean i2 = (a<b) || (a!=b);
boolean i3 = !(a!=b);
System.out.println("i= "+i); //false
System.out.println("i2= "+i2); //true
System.out.println("i3= "+i3); //false
}
六:三目运算符
三目运算符的使用格式为:条件表达式?值1 : 值2。
即若条件表达式成立为true,则取值1,否则取值2。三目运算符等价于if...else语句。
public static void smYsf(){
int a = 23 > 22 ? 1 : 2;
System.out.println("a= "+a); //输出1
//等价于下面的if...else
if(23 > 22){
a = 1;
}else{
a = 2;
}
System.out.println("a= "+a); //输出1
}
七:运算符的优先级
优先级从高到低为:增量和减量运算、算术运算、比较运算、逻辑运算、赋值运算。
优先级 | 描述 | 运算符 |
1 | 括号 | () |
2 | 正负号 | +、- |
3 | 一元运算符 | ++、--、! |
4 | 乘除 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | >>、>>>、<< |
7 | 比较大小 | <、>、<=、>= |
8 | 比较是否相等 | ==、!= |
9 | 按位与运算 | & |
10 | 按位异或运算 | ^ |
11 | 按位或运算 | | |
12 | 逻辑与运算 | && |
13 | 逻辑或运算 | || |
14 | 三元运算符 | ? : |
15 | 赋值运算符 | = |