算术运算符
运算符 | 运算 | 运算符 | 运算 |
---|---|---|---|
+ | 正号 | % | 取模(取余) |
- | 负号 | ++ | 自增(前缀式、后缀式) |
+ | 加 | - - | 自减(前缀式、后缀式) |
- | 减 | + | 字符串连接 |
* | 乘 | ||
/ | 除 |
注意事项
- “前缀式” 如:b = ++a。先进行a++运行,再对b赋值。
- “后缀式” 如:b = a++。先对b赋值,再进行a++运行。
- 自增和自减运算并不改变变量本身的数据类型。
//”后缀式“
int a = 4;
int b = a++;//则b = 4;a = 5;
//”前缀式“
int a = 4;
int b = ++a;//则b = 5;a = 5;
//自增和自减不改变变量本身的类型
byte a = 4;
byte b = a++;//a进行自增运算后,其类型依然是byte类型
byte a = 4;
int b = a + 1;//a与常量进行计算(常量默认是int类型的),其结果必须为int型。
赋值运算符
- 赋值运算符:=。扩展复制运算符:+=、-=、*=、/=、%=
- 赋值运算符不改变变量本身的数据类型。
- “将一个对象赋值给另外一个对象”:a = b,此时将b引用的地址赋值给a,a和b指向同一个对象。
关系运算符
运算符 | 运算 | 运算符 | 运算 |
---|---|---|---|
== | 等于 | >= | 大于等于 |
!= | 不等于 | <= | 小于等于 |
> | 大于 | instanceof | 检查是否是某个类的对象 |
< | 小于 |
注意事项
- 比较运算符的结果都是boolean类型的:false 或 true。
- == 和 equals()方法:
1) == 可以比较基本数据类型,又可以比较引用数据类型。equals()方法只能比较引用数据类型。
2)== 比较引用数据类型时,比较的是对象的引用,而不是对象本身。equals()方法默认比较是对象的引用,但可以通过对其重写比较引用的实际内容。
逻辑运算符
运算符 | 运算 | 运算符 | 运算 |
---|---|---|---|
& | 逻辑与 | && | 短路与 |
| | 逻辑或 | || | 短路或 |
! | 逻辑非 | ^ | 逻辑异或 |
注意事项
- 逻辑运算符的操作对象都是布尔类型的
- & 与 &&(| 和 || 类似)
当符号左边是false时,&继续执行符号右边的运行,&&不再执行符号右边的计算。当符号左边是true时,无影响。
1.相同点:& 和 && 的运算结果相同
2.不同点:
int a = 1;
int b = 2;
if((a > b) & ( ++a > b)) //a > b 的结果是false,&运算中会继续执行++a > b 的运算,结果为:false
if((a > b) && ( ++a > b))//a > b 的结果是false,&&运算中不会执行++a > b 的运算,结果为:false
- 罗辑异或:同为false或true时,结果为:false;否则结果为:true。
三元(目)运算符
(条件表达式) ? 表达式1:表达式2 条件表达式为true,运算结果为表达式1;条件表达式为false,运算结果为表达式2。
- 三元运算符可以转换成if else的形式,缺点是:三元运算符有时候表达较为复杂,不容易理解。优点是:效率相对较高。
位运算符
运算符 | 运算 | 运算符 | 运算 |
---|---|---|---|
<< | 左移 | & | 与运算 |
>> | 右移 | | | 或运算 |
>>> | 无符号右移 | ~ | 取反运算 |
^ | 异或运算 |
注意事项
- 位运算只可以用来处理整数类型,直接对整数的二进制位进行运算
- char、byte、short类型进行移位运算时,会先被转换成 int 类型的值
- <<:在一定范围内,每左移1位,相当于*2;<<:在一定范围内,每右移1位,相当于/2。
- <<:左移运算低位补0;<<:右移运算根据符号位选择在高位补0或1;>>>:无符号右移高位补0。
- 常用: m = ( m ^ n ) ^ n。
运算符的优先级
由于优先级比较多,通常情况下我们使用括号明确其计算顺序即可。