运算符
算术运算符 + , - , * (乘法) , / (求商) , % (求余数)
算术运算符 是一个表达式 ,表达式 在 Java中 不能独立使用,方法中代码的最小组成是语句。
两个数做算术运算,
如果有double,结果为double,
如果有float,结果为float,
如果有long, 结果为 long
其他结果 均为 int
关系运算符 > , >= , < , <= , == , !=
关系运算符 计算出的结果一定是一个 boolean 类型,用来表示真和假
逻辑运算符 && (与) , || (或) , ! (非) , & , |
符号 | exp1 | exp2 | 结果 |
---|---|---|---|
&& | 真 | 真 | 真 |
&& | 假 | 真 | 假 |
&& | 真 | 假 | 假 |
&& | 假 | 假 | 假 |
` | ` | 真 | |
` | ` | 假 | |
` | ` | 真 | |
` | ` | 假 |
逻辑 && : 一假即假 , 逻辑 || : 一真即真 , ! : 非真即假、非假即真。
&& : 会产生短路现象。一假即假, 如果 第一个表达式是 假,能决定真个表达式的结果,则 第二个表达式不会执行
|| :会产生短路现象。一真即真, 如果 第一个表达式是 真,能决定真个表达式的结果,则 第二个表达式不会执行
& : 一假即假 , 不会产生短路, |: 一真即真 , 不会产生短路
赋值运算符 +=, -= , *= , /= , %=
赋值运算符 不会提升数据类型, 相当于对运算的结果执行了强制类型转换操作!
自增/自减 ++, –
a++, ++a 都是对 a 变量进行自增 1 的运算 ~, a++ 和 ++a 即是表达式,又是语句
a++, ++a 如果作为语句来使用,那么效果完全相同!
a++ , ++a 还可以当作表达式来使用,如果作为表达式 来使用,那么他们的作用不一样!
表达式的使用规则
a++ : 先计算表达式的值,表达式的值等于a的值。再对a的值进行自增1运算
++a :先对a的值进行自增1运算,再计算表达式的值,表达式的值等于a的值
位运算符
位运算符是通过二进制进行计算的、只能应用于整数的运算
- & : (位与)
两个二进制数、相同位只要有0,结果为 0, 否则为 1
- | :(位或)
两个二进制数、相同位只要有1,结果为 1, 否则 为 0
- ~ : (位非)
对于一个二进制数要进行位非运算,原来是0,结果为 1, 原来是1,结果为 0
- ^ : (异或)
两个二进制数、相同位 不相同 结果 为 1, 否则为 0
位移运算符
只能适用于 整数运算
-
<< (左移) : 将二进制向左移动 指定位数、低位 补 0 ,如果左移 32位或者他的倍数 ,那么等于原来的数字
-
(右移) : 将二进制向右移动 指定位数、高位 正数 补 0, 负数 补 1
-
(无符号右移) : 将二进制向右移动 指定位数、高位 补 0
三目运算符
语法: exp ? exp1 : exp2
exp 必须是一个 boolean 表达式 (字面量 、关系运算符 、 逻辑运算符 ) , 如果 exp 返回 真 ,
那么 整个三元运算符 的结果是 exp1 表达式的值 ,否则是 exp2 表达式的值 。
三元运算符 exp1 和 exp2 会产生短路现象、 二者返回的数据类型 应该需要一致