运算符的优先级
优先级 | 描述 | 运算符 |
1 | 括号 | ( ) [ ] |
2 | 正负号 | + - |
3 | 自增 自减 非 | ++ -- ! |
4 | 乘 除 取余 | * / % |
5 | 加 减 | + - |
6 | 移位运算 | << >> >>> |
7 | 大小关系 | > >= < <= |
8 | 相等关系 | == != |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ? : |
15 | 赋值运算 | = += -= *= /= % |
16 | 位赋值运算 | &= |= <<= >>= >>>= |
算数运算符
算数运算符包括: | 运算规则 | 范例 | 结果 |
---|---|---|---|
+ |
正号、加 | +3、2+3 | 3、5 |
+ |
连接字符串 | “中“+“国”+2020 | 中国2020 |
- | 负号、减 | -3、2-3 | -3、-1 |
* | 乘 | 2*3 | 6 |
/ | 除 | 5/2 | 2 |
% | 取模 | 5%2 | 1 |
++ | 自增 | ++1,2++ | 2,3 |
-- | 自减 | --3,5-- | 2,4 |
1.加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
2.除法“/”当两边为整数时,取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除。
3.“%”为整除取余符号,小数取余没有意义。结果符号与被取余符号相同。
4.整数做被除数,0不能做除数,否则报错。
a++ 与 ++a 的区别:
在独立运算时,二者并无区别;但是在混合运算时:
a++是使变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再+1。换句话说就是: a 先进行赋值,再计算 。输出结果: a 的结果是2,b的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
++a 是使变量 a 自己+1 , 再将计算完的结果赋值给变量 b ,换句话说就是: a 先计算 , 再赋值 。 输出结果 : a 和 b 的值都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
赋值运算符 : 将符号右边的值 , 赋值给左边的变量
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= |
赋值 | int a = 2 | 2 |
+= |
加后赋值 | int a=2,a+=2 | 4 |
-= |
减后赋值 | int a=2,a-=2 | 0 |
*= |
乘后赋值 | int a=2,a*=2 | 4 |
/= |
整除后赋值 | int a=2,a/=2 | 1 |
%= |
取模后赋值 | int a=2,a%=2 | 0 |
注意 : += 是一个运算符 , 只运算一次 , 并带有强制转换的特点
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析: s += 1
逻辑上看作是s = s + 1
计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是,s=s+1进行两次运算
,+=
是一个运算符,只运算一次,并带有强制转换的特点,也就是说s += 1
就是s = (short)(s + 1)
,因此程序没有问题编译通过,运行结果是2.