概念:使用运算符链接的两个变量或值,最终可以得到一个结果 例:
int a = 10; int b = 20; //表达式 a+b 结果:30
当运算过程中参与运算变量类型不一致时结果类型偏向较大的类型 自动类型提升 例:int与double
int a = 10; double b = 20.5; System.out.println( a+b );//结果:30.5 (double类型)
例:byte与long byte a = 10; long b = 2000L; System.out.println( a+b );//结果:2010 (long类型) 例:byte与byte(特殊) byte b1 = 10; byte b2 = 120; System.out.println( b1+b2 );//结果:130(int类型) 例:任何类型与String(特殊) int a = 10; String str = "Hello"; System.out.println( a + str );//结果:10Hello(String 类型)
提升规则:
byte/short/char
算数运算符
int a = 10; int b = 2; String str = "Hello"
运算符 | 作用 | 例 | 结果 |
---|---|---|---|
+ | 加法运算/字符串拼接 | a+b a+str | 12 10Hello |
- | 减法运算 | a-b | 8 |
* | 乘法运算 | a*b | 20 |
/ | 除法运算 | a/b | 5 |
% | 取余(模运算) | a%b | 0 |
赋值运算符
int a = 10; int b = 2;
运算符 | 作用 | 例 | 结果 | 表达式结果 |
---|---|---|---|---|
= | 右侧数值赋给左侧的变量 | a = 20 | a的值为20 | 20 |
+= | 用变量本身与另一个变量相加求和之后再赋值 | a+=b 等同于 a = a+b | a的值为12 | 12 |
-= | 用变量本身与另一个变量相减之后再赋值 | a-=b等同于 a = a-b | a的值为8 | 8 |
*= | 用变量本身与另一个变量相乘之后再赋值 | a*=b等同于 a = a*b | a的值为20 | 20 |
/= | 用变量本身与另一个变量相除之后再赋值 | a/=b等同于 a = a/b | a的值为5 | 5 |
%= | 用变量本身与另一个变量取余之后再赋值 | a%=b等同于 a = a%b | a的值为0 | 0 |
++ | 变量本身+1 | ++a 等同于 a + 1 a++ 等效于 a + 1 | a的值为11 a的值为11 | 11 10 |
-- | 变量本身-1 | --a等同于a - 1 a--等效于a - 1 | a的值为9 a的值为9 | 9 10 |
面试题:
int a = 5; int b = 2; a+=(a++)+(++a)-(b--)+(++b); //a=a+(a++)+(++a)-(b--)+(++b); //表达式结果: 变量的变化 a =5 b = 2 //a = 5+5+(++a)-(b--)+(++b); (a++)结果为5 a变量6 //a = 5+5+7-(b--)+(++b); (++a)结果为7 a变量7 //a = 5+5+7-2+(++b); (b--)结果为2 b变量1 //a = 5+5+7-2+2; (++b)结果为2 b变量2 //17 每一步都要记录表达式的结果与表达式对变量的影响再进行下一步运算
关系运算符 作用:判断两个变量之间的关系,结果均为boolean类型
int a = 10; int b = 20;
运算符 | 作用 | 例 | 结果 |
---|---|---|---|
> | 大于 | a > b | false |
< | 小于 | a < b | true |
== | 等于 | a == b | false |
!= | 不等于 | a != b | true |
>= | 大于或等于 | a >= b | false |
<= | 小于或等于 | a <= b | true |
逻辑运算符
作用:用于多条件联合判断,结果均为布尔类型
int a = 10; int b = 20; int c = 2;
运算符 | 作用 | 例 | 结果 |
---|---|---|---|
|| | 逻辑或,表示或者 两个条件(表达式)有一个为true时结果为true | ac a>b || a==c | true false |
&& | 逻辑与,表示并且 两个条件必须同时为true结果为true | ac a>b && a>c | true false |
! | 逻辑非,取表达式结果相反的值(颠倒是非) | !(a>b) | true |
||、&&为短路运算符:当第一个表达式执行后就能决定整体结果时,不在执行后续表达式 |、&为非短路运算符:无论之前的表达式结果能不能决定整体结果,所有表达式必须执行一次
三目运算符
作用:根据条件的结果返回不同的结果 语法:
布尔表达式?结果1:结果2; 布尔表达式为true 返回结果1 布尔表达式为false 返回结果2
布尔表达式即结果为boolean类型的表达式
例:
int a = 10; int b = 20; System.out.println( a>b?"Hello":"World" );// 由于a>b为false,返回结果2所以打印World System.out.println( a
例:
//商品价格 double price = 80D; //设计程序完成需求:超市打折满100-20 //根据活动规则计算应付款 //如果 商品价格>=100 应支付 原价-20 否则 按照原价支付 double realPrice = price>=100?price-20:price; System.out.println("应支付"+ realPrice );
位运算符
运算符 | 作用 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位非 |
<< | 向左位移 |
>> | 向右位移 |
>>> | 无符号向右位移 |