运算符
运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。
算术运算符
% 取模、取余
在 % 的本质 一个公式:a % b = a - a / b * b
System.out.println(10 % 3);//1;10-10/3*3=1
System.out.println(-10 % 3);//-1; -10-(-10)/3*3 = -1
System.out.println(10 % -3);//1; 10-10/(-3)*(-3) = 1
System.out.println(-10 % -3);//-1; -10-(-10)/(-3)*(-3) = -1
++ 自增
-
作为独立语句使用:前++和后++都完全等价于 i = i + 1
-
作为表达式使用:前++:++i 先自增后赋值;后++:i++ 先赋值后自增
int i = 10;
i++ ;// i = i + 1; => i = 11
++i ;// i = i + 1; => i = 12
int j = 8;
int k = ++j;//等价于 j=j+1;k=j;
System.out.println("k=" + k + "j=" + j);//k=9 j=9
int a = 8;
int b = a++;//等价于 b=a;a=a+1;
System.out.println("b=" + b + "a=" + a);//b=8 a=9
if(x++==6 & ++y==6)//x先与6比较再+1;y先+1再比较
面试题
int i = 1;//i->1
i = i++;//规则使用临时变量:(1)temp = i;(2)i = i + 1;(3)i = temp;
System.out.println(i);//1
int i = 1; i = ++i;//规则使用临时变量:(1)i = i + 1;(2)temp = i;(3)i = temp; System.out.println(i);//2
关系运算符(比较运算符)
关系运算符细节
-
关系运算符的结果都是boolean型,要么是true,要么是false。
-
关系运算符组成的表达式,我们称之为关系表达式;如a > b。
-
比较运算符“==”不能误写成“=”。
逻辑运算符
用于连接多个条件(多个关系表达式),结果是boolean型
短路与&&和逻辑与& (有假即假)
-
对于&&短路与而言,如果第一个条件为false,后面的条件不会再判断,即语句也不会执行(效率高)
-
对于&逻辑与而言,如果第一个条件为false,后面的条件仍然会判断
短路或||和逻辑或| (有真即真)
-
||短路或:如果第一个条件为true,则第二个条件不会判断(即语句也不会执行),最终结果为true(效率高)
-
|逻辑或:不管第一个条件是否为true,第二个条件都要判断
赋值运算符
基本赋值运算符:=;复合赋值运算符:+=、-=、*=、/=、%=等
赋值运算符特点
-
运算顺序从右往左(指的是符号的左右) int num = a + b + c;
-
赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量值 int num = 20; int num2 = 78 * 34 - 10; int num3 = a;
-
复合赋值运算符会进行类型转换 byte b = 2; b += 3; (等价于 b = (byte)(b + 2);)b++;(b = (byte)(b + 1);)
位运算符
Java有7个位运算(&、|、^[按位异或]、~[按位取反]、>>[算术右移:低位溢出,符号位不变,并用符号位补溢出的高位]、<<[左移:符号位不变,低位补0]、>>>[无符号右移/逻辑右移:低位溢出,高位补0])
注:a % b 当a是小数时,公式 = a - (int)a / b *b
三元运算符
条件表达式 ?表达式1 :表达式2;
运算规则:条件表达式为true,运算结果返回表达式1;反之返回表达式2
-
表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换或强制转换)
-
三元运算符可以转换成if—else语句
运算符优先级
1)()、,、{}等 2)单目运算 ++、-- 3)算术运算符 4)位移运算符 5)比较运算符 6)逻辑运算符 7)三元运算符 8)赋值运算符