独到理解@Java运算符与表达式

运算符与表达式

运算符

释义

用于表示数据的运算、赋值和比较的一系列符号我们称之为运算符。

分类

运算符按功能划分如下:

运算符类型运算符
算术运算符+,-,*,/,++,–,%
关系运算符<,<=,>,>=,==,!=
布尔运算符&&,
位运算符&,
赋值类运算符=, +=, -=, *=, /=, %=
字符串连接运算符+
条件运算符(三目运算符)? :
其他运算符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

&& 且,短路与 和 & 一样,如果第一个语句为假 第二个语句不执行,结果直接为假即可
|| 或.短路或 和 | 一样,同上,第一个就为真,第二个就不执行,结果直接为真即可

赋值运算符

基本赋值运算符
= : 把 右边的赋值给左边
注意

  1. 当 “=” 两侧数据类型不一致时,适用默认转换或强制转换处理,如long num=20;int i=(int)num;
  2. 特殊情况为:当byte,char,short被整赋值时,不需要进行强制类型转换,不超过取值范围即可。即一个自动装载的过程。
char c2 = -99999;
byte b2 = 128; // 类型越界错误
运算符用法c
+=a+=ba=a+b
-=a-=ba=a-b
*=a*=ba=a*b
/=a/=ba=a/b
%=a%=ba=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); // 输出结果为及格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值