大体上,与C语言差不多,不同的地方,我用红色字体标注了
算术运算符
1.
基本四则运算符:加减乘除模
(+ - * / %)
int a = 10 ;int b = 20 ;System . out . println ( a + b ); // 30System . out . println ( a - b ); // 10System . out . println ( a * b ); // 200System . out . println ( a / b ); // 2System . out . println ( a % b ); // 0 ---> 模运算相当于数学中除法的余数注意:都是二元运算符,使用时必须要有左右两个操作数int / int 结果还是 int 类型,而且会向下取整int a = 3 ;int b = 2 ;// 在数学中应该是 1.5 但是在 Java 中输出结果为 1 会向下取整,即小数点之后全部舍弃掉了System . out . println ( a / b );// 如果要得到数学中的结果,可以使用如下方式double d = a * 1.0 / b ;System . out . println ( d );做除法和取模时,右操作数不能为 0int a = 1 ;int b = 0 ;System . out . println ( a / b )// 运行结果Exception in thread "main" java . lang . ArithmeticException : / by zeroat Test . main ( Test . java : 5 )% 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的System . out . println ( 11.5 % 2.0 );// 运行结果1.5
2.
增量运算符
+= -= *= %=
该种类型运算符操作完成后,会将操纵的结果赋值给左操作数
int a = 1 ;a += 2 ; // 相当于 a = a + 2System . out . println ( a ); // 输出 3a -= 1 ; // 相当于 a = a - 1System . out . println ( a ); // 输出 2a *= 3 ; // 相当于 a = a * 3System . out . println ( a ); // 输出 6a /= 3 ; // 相当于 a = a / 3System . out . println ( a ); // 输出 2a %= 3 ; // 相当于 a = a % 2System . out . println ( a ); // 输出 2
3.
关系运算符
关系运算符主要有六个
:
== != < > <= >=
,其计算结果是
true
或者
false
。
int a = 10 ;int b = 20 ;// 注意:在 Java 中 = 表示赋值,要与数学中的含义区分// 在 Java 中 == 表示相等System . out . println ( a == b ); // falseSystem . out . println ( a != b ); // trueSystem . out . println ( a < b ); // trueSystem . out . println ( a > b ); // falseSystem . out . println ( a <= b ); // trueSystem . out . println ( a >= b ); // false注意:当需要多次判断时,不能连着写,比如: 3 < a < 5 , Java 程序与数学中是有区别的
4.
逻辑运算符
(
重点
)
逻辑运算符主要有三个:
&& || ! ,运算结果都是
boolean
类型。
1. 逻辑与 &&语法规则:表达式1 && 表达式 2 ,左右表达式必须是 boolean 类型的结果。两个表达式都为真,结果才是真,只要有一个是假,结果就是假。2. 逻辑 ||语法规则:表达式1 || 表达式 2 ,左右表达式必须是 boolean 类型的结果两个表达式有一个为真,结果就为真。3. 逻辑非 !语法规则: ! 表达式真变假,假变真。4. 短路求值&& 和 || 遵守短路求值的规则:当 表达式1 && 表达式2,左边的式子为假,整个式子的结果就为假了,后面的式子不用计算了当 表达式1 || 表达式2,左边的式子为真,整个式子的结果就为真了,后面的式子不用计算了System . out . println ( 10 > 20 && 10 / 0 == 0 ); // 打印 falseSystem . out . println ( 10 < 20 ||10 / 0 == 0 ); // 打印 true
5.
位运算符
Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位
.
字节是最小的存储单位,每个字节是由
8
个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
位运算符主要有四个
:
& | ~ ^ ,除
~
是一元运算符外,其余都是二元运算符。
位操作表示 按二进制位运算
.
计算机中都是使用二进制来表示数据的
(01
构成的序列
),
按位运算就是在按照二进制位 的每一位依次进行计算.
1. 按位与 & : 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
3. 按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
6.
移位运算
(
了解
)
移位运算符有三个
:
<< >> >>>
,都是二元运算符,且都是按照二进制比特位来运算的。
1.
左移
<<
:
最左侧位不要了
,
最右侧补
0.
int a = 0x10 ;System . out . printf ( "%x\n" , a << 1 );// 运行结果 ( 注意 , 是按十六进制打印的 )20
2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
int a = 0x10 ;System . out . printf ( "%x\n" , a >> 1 );// 运行结果 ( 注意 , 是按十六进制打印的 )8int b = 0xffffffff0000 ;System . out . printf ( "%x\n" , b >> 1 );// 运行结果 ( 注意 , 是按十六进制打印的 )ffffffff8000
3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
int a = 0xffffffffffffffff ;System . out . printf ( "%x\n" , a >>> 1 );// 运行结果 ( 注意 , 是按十六进制打印的 )7f ffffffffffff
总结:<<、>>都是补的符号位,而>>>只补0注意 :1. 左移 1 位 , 相当于原数字 * 2. 左移 N 位 , 相当于原数字 * 2 的 N 次方 .2. 右移 1 位 , 相当于原数字 / 2. 右移 N 位 , 相当于原数字 / 2 的 N 次方 .3. 由于计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 的 N 次方的时候可以用移位运算代替 .4. 移动负数位或者移位位数过大都没有意义
7.
条件运算符
条件运算符只有一个
:
表达式
1 ?
表达式
2 :
表达式
3
当
表达式
1
的值为
true
时
,
整个表达式的值为
表达式
2
的值
;
当
表达式
1
的值为
false
时
,
整个表达式的值为
表达式
3
的值
.
也是
Java
中唯一的一个
三目运算符
,
是条件判断语句的简化写法
.
int a = 10 ;int b = 20 ;int c = a > b ? 1 : 2.0 ;注意:表达式不能单独存在(例如下面,就是错的)int a = 10 ;int b = 20 ;a > b ? a : b ; // 报错: Error:(15, 14) java: 不是语句
8.
运算符的优先级
在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如:
*
和
/
的优先级要高于
+ 和 -
,有些情况下稍不注意,可能就会造成很大的麻烦。
// 求 a 和 b 的平均值int a = 10 ;int b = 20 ;int c = a + ( b - a ) >> 1 ;System . out . println ( c );由于 + 的优先级要高于 >> , 因此 a 先和 b-a 的结果做加法,整体为 20 ,最后再进行右移,因此结果 为10 。