5-运算符
表达式与语句的区别
表达式(expression) vs 语句(statement)
- 表达式一般都有确定的结果(值),不能构成一条能单独执行的代码(往往不能以分号结尾)
- 语句都是可以单独执行代码,以分号结尾,多数语句没有结果
算术运算符
+,-,*,/,%,++,--
+的用法
a:加法
b:正号
c:字符串连接符
自增自减
1.自增自减符号在变量前面,变量先自增自减,再参与后续运算或者赋值
2.自增自减符号在变量后面,变量先参与运算或者赋值,再自增自减。
单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;
赋值运算符
包括基本的赋值运算符(=)和扩展的赋值运算符(+=,-=,*=...)
=,+=,-=,*=,/=,%=等
赋值运算符的运算顺序是,自右向左的,将右边的值,赋值给左边
注:
赋值运算符组成的赋值表达式也是有结果的,结果是赋值运算符等号右边的那个值.
扩展的赋值运算符
隐含了强制类型转换,会自动强转成等号左边接收变量的数据类型
s += 1
不是等价于s = s + 1
而是等价于s = (s的数据类型)(s + 1)
注:
隐含的强转也是强转,仍然会导致数据失真
比较运算符
==,!=,>,>=,<,<=
基本数据类型和基本数据类型比较
引用数据类型和引用数据类型比较,不要夸类型比较.
对于基本数据类型而言,
-
数值类型之间可以互相比较,比较的就是数值大小(纯粹比较数值大小)
-
如果是布尔类型,只能和布尔类型去比较,不能和数值类型比较
-
基本数据类型的数值类型之间的比较,有相等,不等,大于,小于等概念
-
而布尔类型之间比较,只有相等和不等,没有大小概念.
对于引用数据类型而言:
-
它们之间互相能够比较的前提是数据类型一致
-
比如String就只能和String比较
-
System就只能和System比较
-
不能跨类型比较
并且引用数据类型变量之间也没有大小概念,只有相等和不相等
逻辑运算符
&,|,^,!,&&,||
位运算符
&:有0则0
|:有1则1
^:相同则0,不同则1
~:按位取反,0变1,1变0
^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
class OperatorDemo{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.prinln(a ^ b ^ b); //10
System.out.prinln(a ^ b ^ a); //20
}
}
位移运算符
<< 左移:左边最高位丢弃,右边补零
>> 右移:最高位是0,左边补零,最高位是1,左边补1
>>> 无符号右移:无论最高位是0还是1,左边都补0
三目运算符
概念
三目运算符,不是很常见很常用,但是有些场景下是比较好的选择,有自己很独特的使用场景
三目(ternary)运算符,也被称之为三元运算符,即指的是需要三个操作数的运算符
(条件表达式) ? 表达式1 : 表达式2;
- 注: 条件表达式的结果是一个布尔值
它具有以下特点:
-
1.当条件表达式为true时,执行表达式1,否则执行表达式2。
实际上就是if..else
-
2.三目运算符的最大特点就是,它一定会执行一个表达式, 所以它一定会有一个结果。
-
3.正是由于它必须执行表达式。
而语句不能放在表达式的位置,这极大的限制了三目运算符的使用。
这就是三目运算符的缺点
比较if...else
-
实际上if...else可以完全覆盖三目运算符使用场景,并且if...else没有表达式的限制,它更加灵活
-
所以在开发中,有这种选择的需求时,绝大多数情况下,都会使用if...else
-
但是三目运算符:
1.严格来说,它的执行效率要比if...else高
2.语法更简洁,更优雅
综上,在能够使用三目运算符的场景下,尽量使用三目运算符(实际开发中不多见)
不能使用三目运算符,再考虑if...else(很多见)

浙公网安备 33010602011771号