前言
李刚老师《JAVA疯狂讲义》第5版,第3章学习笔记。
1.算术运算符
JAVA支持的7个算术运算符:加(+)、减(-)、乘(x)、除(/)、求余(%)、自加(++)、自减(–)。
注意:
- 加法运算符+:除了可以作为加法运算符,还可以作为字符串连接符
- 除法运算符/:若两个操作数都是整数,则结果也为整数,同时分母不能为0,否则会报错;当两个操作数中有一个为浮点数时,结果就为浮点数。
- 求余运算符%:求余运算的结果不一定为整数,如:5.2 % 3.1 = 2.1。因为%与除法运算符相同,结果是整数还是浮点数取决于操作数的数据类型。
- ++和–为单目运算符,只能作用于一个操作数。并且这个操作数只能是数值型变量。
- 当++(–)在操作数左边时,操作数先自加(自减)再带入表达式运算;当++(–)在操作数右边时,操作数先带入表达式计算再自加(自减)
- 若需要完成更复杂的数学运算,例如:乘方、开方等,则需要借助java.lang.Math类的工具方法实现
2.赋值运算符
JAVA中使用 = 作为赋值运算符,可以用于将一个直接量赋值给一个变量,或者将一个变量的值赋值给另一个变量,或一个表达式的值赋值给另一个变量。
JAVA中,一个赋值表达式本身也是有值的,这个值就是=右边的值,因此以下代码是正确的:
int a;
int b;
int c;
//下方赋值语句,三个变量的值都被赋值为7
a = b = c = 7;
JAVA中,赋值运算符可以与算术运算符、位移运算符结合如下:
+=、-=、*=、/=、%=等。建议更多的使用这种运算符,因为性能更好,并且程序会更加健壮。
3.位运算符
按位运算,也就是按照数据在内存中存储的二进制数字进行运算,JAVA共支持7个位运算符:
1.&:按位与:两个位同时为1是才返回1
2.|:按位或:两个位只要有一个为1就返回1
3.~:按位非:操作数每个位(包括符号位)全部取反
4.^:按位异或:两位相同返回0,不同返回1
5.<<:左移运算符
6.>>:右移运算符
7.>>>:无符号右移运算符
一般来说,位运算符只能操作整数类型的变量或者值。以5^9(&、|、~的逻辑基本类似)为例,分析位运算符的运算过程,如下:
位移运算符逻辑如下:
左移运算符,以-5 << 2为例:
右移运算符逻辑与左移运算符基本相同,但是由于是右移,所以需要补充符号位。当原操作数为正时,符号位补0,当原操作数为负时,符号位补1。
无符号右移运算符逻辑与右移运算符基本相同,但是其符号位永远以0补充。
对于位移运算符注意:
- 对于操作数等级低于int的数据类型(byte、short和char),进行位移操作时,会自动转换为int后进行位移操作。
- 对于int类型,a >> b,若b>32,则JAVA会首先用b对32取余,然后再进行位移运算
- 对于long类型,a>>b,若b>64,咋JAVA会首先用b对64取余,然后再进行位移运算
4.比较运算符
JAVA中的比较运算符用以比较两个常量或变量之间的大小关系,返回一个布尔值。JAVA中支持的比较运算符包括:>、>=、<、<=、==、!=。
注意:
- <、<=、>=、>都需要对比的两个操作数为数值类型
- ==和!=对比的两个操作数可以不是数值类型,如果两个操作数都是引用类型,那么只有这两个引用变量的类型具有父子关系时才能比较,引用指向同一个对象时,==返回true,引用指向不同对象时,!= 返回true。
5.逻辑运算符
JAVA中逻辑运算符用于操作两个布尔型的变量或常量,主要包括:
- &&:与,都真才真,一假就假
- &:不短路与
- ||:或,一真就真,都假才假
- |:不短路或
- !:非,真则得假,假则得真
- ^:异或,相同则真,不同则假
注意:
什么是不短路与、不断路非。例如:
false && false && true = false,这个表达式在运算的过程中,由于&&的第一个操作数为false,所以系统自动判定结果一定为false,因此后面的表达式实际上不会执行。(||同理)
false & false & true = false,这个表达式在运算的过程中,虽然&的第一个操作数为false,但是由于运算符是不短路与&,所以后面的表达式都会执行,最终给出答案。(|同理)
6.三目运算符
JAVA中三目运算符只有一个:
(expression) ? if-true-statement : if-false-statement
大部分时候,三目运算符是作为if else的精简写法出现的
例如:
String str = 5 > 3 ? "5大于3":"5不大于3"
同时,三目运算符可以嵌套使用。