一、赋值运算符
1.赋值
往变量对应的内存空间里塞一个值
2.特点
新值会覆盖原来的旧值,第一次给变量赋值称为“初始化”
3.书写格式
int a = 8;
一般定义变量的时候就给其赋值
可借助赋值运算符实现两个数的交换
二、算术运算符
1.基本运算符
运算符 | 符号 |
---|---|
加法 | + |
减法 | - |
乘法 | * |
除法 | / |
模 | % |
自加一 | ++i i++ |
自减一 | - -i i- - |
++i是先自加再运算,而i++是先运算再自加
注意:
int i = 0;
int j = i++ + ++i;
上面代码里,++i里此时的i已经是1了,因为前面i++已经把i加了1。
2.复合运算符
运算符 | 符号 |
---|---|
加等于 | += |
减等于 | -= |
乘等于 | *= |
除等于 | /= |
模等于 | %= |
(a+=i 相当于 a=a+i)
三、关系运算符
关系运算符的结果是布尔值
i<3&&i>1 相当于 1<i<3
运算符 | 符号 |
---|---|
两者是否相等 | == |
两者是否不相等 | != |
大于和小于 | > < |
大于等于和小于等于 | >= <= |
java是强类型语言,只有==,没有===
== 里只要是数值型的数据,包括整数和小数,都算同一类型,但是float和double由于精度不一样小数点后非零的小数与小数之间相比会是false
== 还可以比较 char型 和 整数 ,比较的是char符号的码表数是否与整数数值相等
== 如果比较引用类型则判断对象地址是否相等。
四、逻辑运算符
逻辑运算符操作的都是Boolean类型的变量,返回的结果也是Boolean类型
运算符 | 符号 |
---|---|
逻辑与和逻辑或 | & | |
短路与和短路或 | && || |
逻辑非 | !(俗称 取反) |
逻辑异或 | ^ (两条件相同返回false,反之true) |
计算的优先级:! > && > ||
五、条件运算符
条件运算符也称三元(三目)运算符
写法: 条件?表达式1:表达式2
若条件成立则返回表达式1,反之返回表达式2
int a = 1, b = 2;
System.out.print(a>b?"a更大":"b更大");
六、位运算符
运算符 | 符号 |
---|---|
按位与 | & |
按位或 | | |
按位非 | ~ |
按位异或 | ^ |
&、| 和^这三个符号,在进行逻辑运算的时候是逻辑运算符而在进行位运算的时候是位运算符
位运算符是将值转化为二进制来进行计算
七、运算符的优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、– | 从左向右 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | &优先于^优先于| | 从左向右 |
9 | &&优先于||优先于?: | 从左向右 |
10 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从左向右 |
()可以改变其他运算符的优先级
源代码就是一份文档,源代码的可读性比代码运行效率更重要。 因此在这里要提醒大家:
1.不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
2.不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。