运算符与表达式
运算符
释义
用于表示数据的运算、赋值和比较的一系列符号我们称之为运算符。
分类
运算符按功能划分如下:
运算符类型 | 运算符 |
---|---|
算术运算符 | +,-,*,/,++,–,% |
关系运算符 | <,<=,>,>=,==,!= |
布尔运算符 | &&, |
位运算符 | &, |
赋值类运算符 | =, +=, -=, *=, /=, %= |
字符串连接运算符 | + |
条件运算符(三目运算符) | ? : |
其他运算符 | instanceof,new |
算术运算符
++ – 比 * / + - % 优先级高
单目 > 双目 > 三目
单元 > 双元 > 三元
i++ 和 ++i 的区别
类型 | 描述 | 示例 |
---|---|---|
++(自加运算符) | ++在变量前面时,先做运算后赋值 | i = 1, j; j = ++i; 则j=2; |
++在变量后面时,先做赋值后运算 | i = 1, j; j = i++; 则 j = 1 | |
–(自减运算符) | 同上 | i = 1, j; j = - -i; 则 j = 0; |
i = 1, j; j = i- -; 则 j = 1; |
关系运算符
< >= <= == !=
== 判断相等
!= 不等于
返回结果 都是 boolean (true/false)
逻辑运算符
与 &: 两个操作数相与,如果都为true,则为true
或 |: 两个操作数相或,有一个为true,则为true
非! : 取反,真就是假,假就是真
异或 ^: 相异为true,两个操作数不一样就为true,相同为false
按位非~ :
比如 0的二进制 00000000
~0 之后 就是 11111111 反码 10000000
>> : 右移运算符(考虑符号位,就是再怎么移动,符号位不变,正数就是正数,负数就是负数)
8 >> 2 = 2 32 16 8 4 2 1 正数 左边补0, 负数 左边补1 考虑符号位
X >> n = x/2^n (不会出现小数,取商)
<< : (不考虑符号位,最大值移动就会变负数,最小值移动就会变正数)同上,就是向左移动
X << n = x*2^n
>>> : 右移,不考虑符号位
正数没有影响,负数直接变正数,因为把符号位的1替换成0
直接最左边补0
&& 且,短路与 和 & 一样,如果第一个语句为假 第二个语句不执行,结果直接为假即可
|| 或.短路或 和 | 一样,同上,第一个就为真,第二个就不执行,结果直接为真即可
赋值运算符
基本赋值运算符
= : 把 右边的赋值给左边
注意
- 当 “=” 两侧数据类型不一致时,适用默认转换或强制转换处理,如long num=20;int i=(int)num;
- 特殊情况为:当byte,char,short被整赋值时,不需要进行强制类型转换,不超过取值范围即可。即一个自动装载的过程。
char c2 = -99999;
byte b2 = 128; // 类型越界错误
运算符 | 用法 | c |
---|---|---|
+= | a+=b | a=a+b |
-= | a-=b | a=a-b |
*= | a*=b | a=a*b |
/= | a/=b | a=a/b |
%= | a%=b | a=a%b |
比如 :
i+=10 等价于 i = i + 10;
虽然是等价关系,但是还是不一样
I++ ++i 以及 += /= 这种写法,不需要强制类型转换
byte b = 10;
b = b +1; X 错误,需要强制类型转换,因为byte,short,char,int 任意一种或多种进行运算,结果都是int
b++; 不会报错
b += 11; 不会报错
b+= 200; 不会报错,虽然 超过了byte上限,只是数据出错了,但是语法没问题,相当于自动强制类型转换了
字符串连接运算符
- “+” 可用于数值计算,当有一方是字符时,则为将左右两个数据转化成字符串连在一起。
int i = 10 + 20;
String j = "10" + "20";
- 当" +" 任意一侧为字符串时,系统将自动将两侧转化成字符串,做字符串链接操作。
- 当进行System.out.println(var)打印操作的时候,均自动转化为字符串进行输出。
三目运算符
也有叫三元运算符
boolean表达式? 真语句 : 假语句;
只要返回运算结果为boolean类型,都是boolean表达式
运算优先级
优先级 | 运算符分类 | 结合顺序 | 运算符 |
---|---|---|---|
由高到低 | 分隔符 | 左结合 | . [] ( ) ; , |
一元运算符 | 右结合 | ! ++ – - ~ | |
算术运算符 | 左结合 | * / % + - | |
移位运算符 | << >> >>> | ||
关系运算符 | 左结合 | < > <= >= instanceof == != | |
逻辑运算符 | 左结合 | ! && | |
三目运算符 | 右结合 | 布尔表达式?表达式1:表达式2 | |
赋值运算符 | 右结合 | = *= /= %= += -= <<= >>= >>>= &= *= |
例题 :
int a = 5;
int b = 4;
int c = a++ - --b * ++a / b-- >> 2 % a--;
// c的值是多少?
-1
表达式
表达式是指由(常量、变量、操作数)与运算符所组合而成的语句。
- 符合语法规则的运算符+操作数,即为表达式,如:5+3,2.0+3.0,a+b,3%2
- 表达式最终运行结果即为表达式的值,值的类型就是表达式的类型
- 运算符优先级,决定表达式的运算顺序
- 三目运算符:
形如:x?y:z
释义:计算x的值,若为true,则表达式的值为y;若为false,则表达式的值为z
示例:
int score = 70;
String result = score < 60 ? "不及格" : "及格";
System.out.println(result); // 输出结果为及格