Java基础——运算符
算数运算符
- 参与/运算的两个操作数都是整数时,表示整数除法,否则,表示浮点除法。
- 整数被0除将产生异常,浮点数被0除将会得到无穷大或NaN结果。
- 算数表达式中包含多个基本数据类型的值时,整个算数表达式的类型将会自动提升,
等级顺序:byte,short,char–>int–>long–>float–>double - 字符的+操作是使用ASCII码值进行计算
- 字符串的+操作表示字符串的连接符
自增自减运算符
- 运算符在变量后,先使用再计算;运算符在变量前,先计算后使用;
- Java 5.0以上版本,可以用于基本类型对应的包装器类;
- 运算结果的类型与被运算的变量的类型相同。
关系运算符
- 关系运算符的结果都是boolean类型。
逻辑运算符
- 逻辑与 & 正正得正,其余为负
- 逻辑或 | 负负得负,其余为正
- 逻辑异或 ^ 不同为正,相同为负
- 逻辑非 ! 取反
- 短路与 && 若左边表达式为false则不会对右边的表达式判断
- 短路或 || 若左边的表达式为true则不会对右边的表达式判断
三元运算符
- expression1 ? expression2 : expression3
- expression2 和 expression3 必须为有值表达式,return语句不是合法的有值表达式,故不能使用。
位运算符
- 位运算符对操作数二进制的位进行运算。对每个二进制位(bit)进行计算,操作数和结果数均为整形。
- 按位与 & 按位进行与运算(AND)
00000000 00000101 & 00000000 00001100 00000000 00000100 \begin{array}{cl} \quad\ 00000000\ 00000101 \\ \ \&\ 00000000\ 00001100 \\ \hline \quad\ \, 00000000\ 00000100 \end{array} 00000000 00000101 & 00000000 00001100 00000000 00000100 - 按位或 | 按位进行或运算(OR)
00000000 00010101 ∣ 00000000 00001100 00000000 00011101 \begin{array}{cl} \quad\ 00000000\ 00010101 \\ \ \ |\ \ 00000000\ 00001100 \\ \hline \quad\ \, 00000000\ 00011101 \end{array} 00000000 00010101 ∣ 00000000 00001100 00000000 00011101 - 按位异或 ^ 按位进行异或运算(XOR)
00000000 00010101 ∧ 00000000 00001100 00000000 00011101 \begin{array}{cl} \quad\ 00000000\ 00010101 \\ \ ^\land \ \,00000000\ 00001100 \\ \hline \quad\ \, 00000000\ 00011101 \end{array} 00000000 00010101 ∧ 00000000 00001100 00000000 00011101 - 按位反 ~ 按位进行取反运算(NOT)
∼ 00000000 11001100 11111111 00110011 \begin{array}{cl} \ ^\sim \ \,00000000\ 11001100 \\ \hline \quad\ \, 11111111\ 00110011 \end{array} ∼ 00000000 11001100 11111111 00110011 - 左移运算符<<:按二进制形式把所有的数字向左移动对应的位数,高位舍弃,低位补零;会改变符号位;对于int类型(32bit)左移位数大于32位操作时,会先求余后再进行左移操作,如a<<32,相当于不进行位移,a<<40,相当于左移8位;long类型(64bit)求余操作基数为64。
num<<1 = num*2 - 右移运算符>>:按二级制形式把所有的数字向右移动对应的位数,低位舍弃,高位补符号位;
num>>1 = num/2 - 无符号右移运算符>>>: 低位舍弃,高位补零;负数通过此运算符可以移位成正数;
- byte、short位移前会转换为int类型(32bit)再进行位移。