目录
(一)算术运算符
运算符 | 运算 | 范例 | 结构 |
+ | 正号 | +3 | 3 |
- | 负号 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 减 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取余(取模) | 7%5 | 2 |
++ | 自增(前):先运算后取值 | a=2;b=++a; | a=3;b=3 |
++ | 自增(后):先取值后运算 | a=2;b=a++ | a=3;b=2 |
-- | 自增(前):先运算后取值 | a=2;b=--a | a=1;b=1 |
-- | 自增(后):先取值后运算 | a=2;b=a-- | a=1;b=2 |
+ | 字符串连接 | "he"+"llo" | "hello" |
%:取余运算
(1)结果的负号与被模数的符号相同。
(2)开发中,经常用%能否被除尽的情况。
++or--不会改变本身变量的数据类型。
(2)赋值运算符
符号:=
a.当"="两侧数据类型不一样时,可以使用自动类型转换或使用强制类型转换原则进行处理。
b.支持连续赋值。
运算符 | 范例 | 转化 | 结果 |
+= | n=10;n+=2 | n=n+2 | 12 |
-= | n=10;n-=2 | n=n-2 | 8 |
*= | n=10;n*=2 | n=n*2 | 20 |
/= | n=10;n/=2 | n=n/2 | 5 |
%= | n=10;n%=2 | n=n%2 | 0 |
(三)比较运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 检查是否是类的对象 | "hello"instanceof String | true |
a.比较运算符的结果都是boolean型,也就是true或false。
b.区分==和=。
(四)逻辑运算符
&——逻辑与 |——逻辑或 !——逻辑非
&&——短路与 ||——短路或 ^——逻辑异或
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
ture | ture | ture | ture | false | false | false | false |
ture | false | false | false | ture | ture | false | ture |
false | ture | false | false | ture | ture | ture | ture |
false | false | false | false | ture | ture | ture | false |
逻辑运算符操作的都是boolean类型的变量。
区分:&与&&
相同点1:&与8&的运算结果相同。
相同点2:当符号左边是true时,二者都会执行符号右边的运算。
不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再执行符号右边的运算。
开发中,推荐使用&&
区分:|与||
相同点1:|与|| 的运算结果相同。
相同点2:当符号左边是false时,二者都会执行符号右边的运算。
不同点:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算。
开发中,推荐使用||
(五)位运算符
位运算是直接对整数的二进制进行的计算。
运算符 | 运算 | 范例 | 位运算符的细节 |
<< | 左移 | 3<<2=12-->3*2*2=12 | 空位补0,被移除的高位丢弃,空缺位补0。 |
>> | 右移 | 3>>1=1-->3/2=1 | 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 |
>>> | 无符号右移 | 3>>>1=1-->3/2=1 | 移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& | 与运算 | 6&3=2 | 二进制位进行&运算,只有1&1时结果是1,否则是0; |
| | 或运算 | 6|3=7 | 二进制位进行|运算,只有0|0时结果是0,否则是1; |
^ | 异或运算 | 6^3=5 | 相同二进制位进行^运算,结果是0;1^1=0,0^0=0 不相同二进制位^运算结果是1。1^0=1,0^1=1 |
~ | 取反运算 | ~6=-7 | 正数取反,各二进制码按补码各位取反 负数取反,各二进制码按补码各位取反 |
结论:
1.位运算符操作的都是整型的数据
2.<<:在一定范围内,每向左移1位,相当于*2
>>:在一定范围内,每向右移1位,相当于/2
(六)三元运算符
1.结构:(条件表达式)?表达式1:表达式2
2.说明
条件表达式的结果为boolean类型
根据条件表达式真或假,决定执行表达式1,还是表达式。
2.如果表达式为true,则执行表达式1,如果表达式为false,则执行表达式2。
3.表达式1和表达式2要求是一致的。
4.三元运算符可以嵌套使用
5.凡是可以使用三元运算符的地方,都可以改写为if-else
反之,不成立。
6.如果程序既可以使用三元运算符,又可以使用if-else结构,那么优先选择三元运算符。原因:简洁,执行效率高。
(七)运算符的优先级
上一行运算符优先于下一行
。 () {} ; , |
++ -- ~ !(data type) |
* / % |
+ - |
<<` > > >>> |
< > <= >= instanceof |
== != |
& |
^ |
| |
&& |
|| |
? : |
= *= /= %= |
+= -= <<= >>= |
>>>= &= ^= |= |
只有单目运算符,三元运算符,赋值运算符是从右向左运算的。
总结:
不必刻意记,善用()进行计算。
(八)运算规则
前提:这里讨论只是7种基本数据类型变量间的运算。不包含boolean类型的。
1.自动类型提升:
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte、char .short -->int-->long -->float -->double
特别的:当byte、char、short三种类型的变量做运算时,结果为int型
注意:若使用String进行计算,从String数据后运算数据均为String型。
2.强制类型转换:自动类型提升运算的逆运算。
1.需要使用强转符: ()
2.注意点:强制类型转换,可能导致精度损失。