1. 算术运算符

运算符 运算 范例 结果
+ 正号 +3 3
- 负号 b=4;-b -4
+ 5+5 10
- 5-4 1
* 3*4 12
/ 5/2 2
% 取模 5%5 0
++ 自增(前) 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– b=2;a=1
+ 字符串相加 “hello”+”world” helloworld

算术运算符的注意问题

  • 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。(取模运算符号看被模数,即左边)
  • 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
    • 例如:int x=3510;x=x/1000*1000; x的结果是?3000
  • “+”除字符串相加功能外,还能把非字符串转换成字符串,
    • 例如:System.out.println(“5+5=”+5+5);//打印结果是?5+5 = 55

2. 赋值运算符

运算符 运算 范例 结果
= 赋值 a=3;b=2 a=3;b=2
+= 加等于 a=3;b=2;a+=b a=5;b=2
-= 减等于 a=3;b=2;a-=b a=1;b=2
*= 乘等于 a=3;b=2;a*=b a=6;b=2
/= 除等于 a=3;b=2;a/=b a=1;b=2
%= 模等于 a=3;b=2;a%=b a=1;b=2
1
2
3
4
5
6
int a,b,c; a=b=c=3;
int a = 3; a+=5;等同运算
a=a+5;
short s = 3;
s=s+2;//编译报错 因为short,char ,byte 在表达式运算中会自动向上转型int s=(short)s+2
s+=2;//编译通过

3. 比较运算符

运算符 运算 范例 结果
== 相等 a=3;b=2;a==b false
!= 不等于 a=3;b=2;a!=b true
< 小于 a=3;b=2;a<b fasle
> 大于 a=3;b=2;a>b true
<= 小于等于 a=3;b=2;a<=b fasle
>= 大于等于 a=3;b=2;a>=b true
instanceof 检查是否是类的对象 “Hello” instanceof String true

注意:

  • 比较运算符运行结束之后返回的都是boolean
  • 注意运算符= =不要写成=

4. 逻辑运算符

运算符 运算 范例 结果
& and(与) false&true false
| or(或) true|false true
^ xor异或 true^false;true^true true;false
! not(非) !false true
&& 短路与 false&&true fasle
|| 短路或 true||false true

注意:

  1. 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
  2. “&”和“&&”的区别:
    • 单&时,左边无论真假,右边都进行运算;
    • 双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
    • “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
  3. 异或( ^ )与或( | )的不同之处是:当左右都为true时, 结果为false。

5. 位运算符

运算符 运算 范例 结果
<< 左移位 3<<2 12 (3*2*2=12)
>> 右移位 3>>1 1(3/2=1)
>>> 无符号右移位 3>>>1 1(3/2=1)
& 与运算 6&3 2
| 或运算 6|3 7
^ 异或运算 6^3 5
~ 反码 ~6 -7

位运算符的细节

  1. << : 空位补0,被移除的高位丢弃,空缺位补0。左移几位就相当于乘以2的几次方
  2. >> : 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。 相当于除以2的几次方。
  3. >>> : 被移位二进制最高位无论是0或者是1,空缺位都用0补。 正数移动没区别,负数移动后变为正数。
  4. & : 二进制位进行&运算,只有1&1时结果是1,否则是0;
  5. | : 二进制位进行| 运算,只有0 | 0时结果是0,否则是1;
  6. ^ : 任何相同二进制位进行^ 运算,结果是0;1^1=0 , 0^0=0不相同二进制位^ 运算结果是1。1^0=1 , 0^1=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a. 有两个int型变量a和b,在不使用第三个变量的情况下交换两个变量中的值
public static void swapNum(int a, int b)
{
a = a^b;
b = a^b;
a = a^b;
System.out.println("交换后:a="+a+";b="+b);
}
b. 最有效率的方式算出2乘以8等于几?2<<3;
class OperationTest
{
public static void main(String[] args)
{
System.out.println(2<<3);
}
}