java中的运算符
1、算术运算符
基本四则运算符 + - * / %
运算规则比较简单,但需要注意除法。
注意:
1、int/int结果是int,但是需要用double来计算;
2、0不能作为除数;
3、%表示取余,不仅可以对int取模,还可以对double取模;
增量赋值运算符 += -= *= /= %=
自增/自减运算符 ++ -
注意:
1、如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别;
2、 如果取表达式的返回值, 则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值;
2、关系运算符
关系运算符主要有六个:
== != < > <= >=
注意:
关系运算符的表达式返回值都是布尔(boolean)类型;
3、逻辑运算符
逻辑运算符主要有三个:
&& || !
注意:
逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean ;
逻辑与&&
规则:两个操作数都为 true, 结果为 true, 否则结果为 false。
逻辑或||
规则:两个操作数都为 false, 结果为 false, 否则结果为 true。
逻辑非!
规则:操作数为true,结果为false;操作数为false,结果为true(逻辑非!为单目运算符,故只有一个操作数)。
短路求值
&&和||遵循短路求值的规则。
结论:
1、对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式;
2、对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式;
当程序出现异常,会立马停止运行,不会继续执行;
& 和 | (不推荐使用)
& 和 | 如果操作数为 boolean 的时候, 也表示逻辑运算. 但是和 && 以及 || 相比, 它们不支持短路求值。
4、位运算符
Java 中对数据的操作的小单位不是字节, 而是二进制位。
位运算符主要有四个:
& | ~ ^
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.
按位与&
规则:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。
进行按位运算会先将十进制转换为二进制再进行运算。
按位或|
规则: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1。
注意:
当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻 辑运算。
按位取反 ~
规则:如果该位为 0 则转为 1, 如果该位为 1 则转为 0。
注意:
1、 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4 个二 进制位;
2、 0xf 表示 10 进制的 15, 也就是二进制的 1111 ;
3、 printf 能够格式化输出内容, %x 表示按照十六进制输出;
4、 \n 表示换行符。
按位异或^
规则:如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1。
5、移位运算
移位运算符有三个:
<< >> >>>
左移<<
规则:最左侧溢出,最右侧补0。
右移>>
规则:最右侧溢出,最左侧补符号位(正数补0,负数补1)。
无符号右移>>>
规则:最右侧溢出,最左侧补0。
注意:
1、左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方;
2、 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方;
3、由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替;
4、 移动负数位或者移位位数过大都没有意义。
6、条件运算符
条件运算符只有一个:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表 达式3 的值。
条件运算符是java中唯一一个三目运算符,是条件判断语句的简体写法。
7、运算符优先级
运算符之间是有优先级的, 具体的规则我们不必记忆,在可能存在歧义的代码中加上括号即可。
8、小结
1、% 操作再 Java 中也能针对 double 来计算;
2、需要区分清楚 前置自增 和 后置自增之间的区别;
3、由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean;
4、要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算;
整体来看, Java 的运算符的基本规则和 C 语言基本一致。