Java运算符
Java  ·  
运算符:一种特殊的符号,用以表示数据的运算、赋值和比较等。包括:算术运算符、赋值运算符、关系运算符(比较运算符)、逻辑运算符、位运算符、三元运算符。
算术运算符
算数运算符:对数据类型的变量进行运算。
演示 "/"(除法):
-
- System.out.println(10 / 4); //输出2
System.out.println(10.0 / 4); //输出2.5
double d = 10 / 4;
System.out.println(d); //输出2.0,因为结果为整数2,再赋值给double,会变成2.0
- System.out.println(10 / 4); //输出2
演示 "%"(取模):a % b = a - a / b * b;当a为小数时,a % b = a - (int)a / b * b
-
- System.out.println(10 % 3); //1
System.out.println(-10 % 3); //-1
System.out.println(10 % -3); //1
System.out.println(-10 % -3); //-1
- System.out.println(10 % 3); //1
演示"++"(自增):
- 作为独立语句使用前++和后++都完全等价于i = i +1;
- 作为表达式使用,前++先自增后赋值,后++先赋值后自增;
- int j = 8;
int k = ++j; //等价于 j=j+1;k=j;
int k = j++; //等价于 k=j;j=j+1;
System.out.println("k=" + k + "j=" + j); - int i = 1;
i = i++; //规则使用临时变量:①temp=i ②i=i+1 ③i=temp
System.out.println(i); - int i = 1;
i = ++i; //规则使用临时变量:①i=i+1 ②temp=i ③i=temp
System.out.println(i);
- int j = 8;
- 底层有类型转换。
- byte b = 3;
b++; //等价 b = (byte)(b + 1);
- byte b = 3;
关系运算符(比较运算符)
关系运算符:结果都是boolean型,要么是true要么是false。常用在if结构的条件中或循环结构的条件中。
使用细节:
- 关系运算符组成的表达式称为关系表达式,如a > b;
- 比较运算符“==”不能误写成“=”,区分“==”与“=”。
逻辑运算符
逻辑运算符:用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
逻辑运算规则:
- a&b : & 叫逻辑与。规则:当a 和b 同时为true ,则结果为true, 否则为false;
- a&&b : && 叫短路与。规则:当a 和b 同时为true ,则结果为true,否则为false;
- 区别:
- &&短路与:如果第一个条件为false,则第二个条件不会判断(不执行),最终结果是false,效率高;
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断(会执行),效率低;
- 开发中,我们使用的基本是使用短路与&&,效率高。
- int a = 4;
int b = 9;
if(a < 1 & ++b < 50) {
System.out.println("ok300");}
System.out.println("a=" + a + " b=" + b);// a=4。若为&&,则b=9;若为&,则b=10。
- int a = 4;
- 区别:
- a|b : | 叫逻辑或。规则:当a 和b ,有一个为true ,则结果为true,否则为false;
- a||b : || 叫短路或。规则:当a 和b ,有一个为true ,则结果为true,否则为false;
- 区别:
- ||短路或:如果第一个条件为true,则第二个条件不会判断(不执行),最终结果是true,效率高;
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断(会执行),效率低;
- 开发中,我们使用的基本是使用短路或||,效率高。
- 区别:
- !a : 叫取反。或者非运算。当a 为true, 则结果为false, 当a 为false 是,结果为true;
- a^b: 叫逻辑异或。当a 和b 不同时,则结果为true, 否则为false。
赋值运算符
赋值运算符:将某个运算后的值,赋给指定的变量。
- 基本赋值符:=;
- 复合赋值符:+=、-=、*=、/=、%=等。
特点:
- 运算顺序从右向左;
- 赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值;
- 复合赋值运算符会进行类型转换。
- byte b = 3;
b += 2; //等价 b = (byte)(b + 2);
- byte b = 3;
三元运算符
三元运算符:条件表达式?表达式1:表达式2;
运算规则:
- 如果条件表达式为true,运算后的结果是表达式1;
- 如果条件表达式为false,运算后的结果是表达式2。
使用细节:
- 表达式1和表达式2要为可以赋给接收变量的类型(或可以自动/强制转换);
- (本质)三元运算符可以转成if - else语句。
位运算符
位运算符:按位与&、按位或|、按位异或^、按位取反~、算术右移>>、算术左移<<、逻辑右移(无符号右移)>>>。(没有<<<符号)
运算规则:计算机运算是补码,运算结果是原码
- 按位与&:两位全是1,结果为1,否则为0;
- 按位或|:两位有一位是1,结果为1,否则为0;
- 按位异或^:两位一个为0,一个为1,结果为1,否则为0;
- 按位取反~:1 → 0,0 → 1:
- 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位;本质:/ 2
- 算术左移<<:符号位不变,低位补0;本质:* 2
- 逻辑右移(无符号右移)>>>:低位溢出,高位补0。
运算符优先级
优先级:表达式中的运算顺序,上一行运算符总优先于下一行。只有单目运算符、赋值运算符是从右向左运算的。