目录
运算符用来执行数学运算
运算符类型 | 表示 |
---|---|
一元运算符 | +,-,*,/,%(取余) |
二元运算符 | ++,-- |
赋值运算符 | = |
扩展运算符 | +=,-=,*=,/= |
关系运算符 | >,<,>=,<=,==,!= |
逻辑运算符 | &&,||,!,^ |
位运算符 | &,|,^,~,>>,<<,>>> |
条件运算符 | ?: |
字符串连接符 | + |
1. 算术运算符
-
整数运算
-
如果两个操作数有一个为Long,则结果为Long
public class TestOperator{ public static void main(String[] args){ //算术运算符 int a = 2; long b = 4; long c = a+b; //如果int c = a+b会报错 } }
- 没有Long时,结果为int
-
-
浮点运算
-
如果两个数有一个为double,则结果为double
-
只有两个操作数都为float,结果才为float
-
-
取模运算
-
操作数可以为浮点数,一般使用整数,结果是”余数“,”余数“符号和左边操作数相同,如7%3=1,-7%3=-1,7%-3=1
-
-
算术运算中++(自增),--(自减)属于一元运算符,故只需要一个操作数
public class TestOperator01{ public static void main(String[] args){ //一元算术运算符 int d = 30; d++; //d = d+1; System.out.println(d); d--; //d = d-1; System.out.println(d); e = 10; int h = g++; //h=10, g++先赋值,再自增 int i = ++g; //++g先自增,再赋值 System.out.println(e); System.out.println(h); System.out.println(i); } }
2. 赋值及其扩展赋值运算符
运算符 | 用法举例 | 等效表达式 |
---|---|---|
+= | a += b | a = a+b |
-= | a -= b | a = a-b |
*= | a *= b | a = a*b |
/= | a /= b | a = a/b |
%= | a %= b | a = a%b |
public class TestOperator02{
public static void main(String[] args){
int a = 3;
int b = 4;
a += b; //a = a+b
System.out.println(a); //a=7
a = 3;
a *= b+3; //a = a*(b+3)
System.out.println(a); //a=21
}
}
3. 关系运算符
运算符 | 含义 | 示例 |
---|---|---|
== | 等于 | a==b |
!= | 不等于 | a!=b |
> | 大于 | a>b |
< | 小于 | a<b |
>= | 大于或等于 | a>=b |
<= | 小于或等于 | a<=b |
4. 逻辑运算符
逻辑运算的操作数和运算结果都是boolean值
运算符 | 表示 | 说明 |
---|---|---|
逻辑与 | & | 两个操作数为true,结果为true,否则为false |
逻辑或 | | | 两个操作数一个为true,结果为true |
短路与 | && | 只要有一个为false,结果为false |
短路或 | || | 只要有一个为true,结果为true |
逻辑非 | ! | 取反,!false为true,!true结果为false |
逻辑异或 | ^ | 相同为false,不同为true(异或很重要) |
public class TestOperator03{
public static void main(String[] args){
boolean b1 = true;
boolean b2 = false;
System.out.println(b1&b2); //false
System.out.println(b1|b2); //true
System.out.println(!b2); //true
System.out.println(b1^b2); //true
}
}
5. 位运算符
位运算是进行二进制位的运算
位运算符 | 说明 |
---|---|
~ | 取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
<< | 左移运算符,左移1位相当于乘2 |
>> | 右移运算符,右移1位相当于除2取商 |
public class TestOperator04{
public static void main(String[] args){
int a = 7;
int b = 8;
System.out.println(a&b); //0
System.out.println(a|b); //15
System.out.println(a^b); //15
System.out.println(~b); //-9
//移位
int c = 5<<2; //相当于 5*2*2=20
System.out.println(c);
}
}
6. 字符串连接符
"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
public class TestOperator05{
public static void main(String[] args){
String a = "3";
int b = 4;
System.out.println(a+b); //34
char c1 = 'h';
char c2 = 'i'
System.out.printlb(c1+c2); //209,因为char不是String类型,仍为整数运算,所以返回数字,连接符的条件是字符串而不是字符
System.out.printlb(""+c1+c2); //hi,通过+"",将整个运算转换为字符串链接操作
}
}
7. 条件运算符
语法格式:x?y:z
其中x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
public class TestOperator06{
public static void main(String[] args){
int score = 80;
String a = score>60?"pass":"no pass";
System.out.println(a); //pass
if(score<60){
a = 'no pass';
}else{
a = 'pass';
}
int x = -100;
int flag = x>0?1:(x==0?0:-1);
System.out.println(flag); //x = -100 --> -1 x = 100 --> 1 x = 0 --> 0
}
}
8. 运算符优先级问题
用括号吧,不记了