我所理解的Java运算符
一、算数运算符
+ - * / % ++ - –
二元运算符
1、+ 运算符
- 字符执行时,会根据自作向右的顺序执行
- 如果数值类型的变量和字符进行求和,先将字符转成对应的数值进行求和
- 整数运算结束后,结果一定是整数
- byte/short/char在运算后结果自动提升为int
- 如果存在字符串常量,‘+’则执行拼接操作(可以于任何类型进行拼接)
2、-运算符
- 小数不存在精确运算
3、%运算
- 取余结果的正负取决于左侧值的正负
- 操作数可以为浮点数,一般使用整数
4、/运算
- 整数/0 抛出异常ArithmeticException 算数异常
- 非零小数/0 非零数字/0.0 infinity 无穷
- 0.0/0 0/0.0 0.0/0.0 NaN 非数字
- 如果参与运算数据都为整数。结果一定为整数
- 如果参与运算数据都为小数,结果一定为小数
- 4/5 结果等于0
5、*运算
- 规则同/运算
一元运算符
1、++运算
- a++先赋值后++
- ++a先++后赋值
- byte b=127 b++结果为-128
- 无论byte、short、char在操作++、–时,底层会默认添加一个强制类型转换,结果类型是原来的类型
2、–运算
- 规则同++运算
- a–先赋值后–
- –a先–后赋值
二、赋值运算符
=、+=、-=、/=、*、&=、|=、^=、>>=、<<=、<<<=、>>>=
- 除了=以外,其余符号都要求变量先有值次啊能使用
- byte/short/char可以参与赋值运算
三、关系运算符
- 类型
- ==
- !=
- >
- <
- >=
- <=
- 注意:
- ==、!= 是所有(基本、引用)数据类型都可以使用的
- >、<、<=、>=仅针对于数值类型(byte、short、int、long、float、double)以及char使用
- 运算结果一定是boolean类型
- 比较值的关系
四、逻辑运算符
- 作用:
- 用于连接两边都是布尔值或者布尔表达式的情况
- 类型:
- & 逻辑与
- 遇见False则False
- | 逻辑或
- 遇见True则True
- ^ 逻辑异或
- 相同false,反之true
- ! 逻辑非
- 对布尔值取反,true为false,false为true
- && 短路与
- 运算规律与逻辑与相同,存在短路操作
- 当左边布尔值为false,右边表达式则不执行
- || 短路或
- 运算规律与逻辑或规则相同,存在短路操作
- 当左边布尔值为true,右边表达式则不执行
- & 逻辑与
五、位运算符
- 规则
- & 按位与
- 遇0则0,双1则1
- | 按位或
- 遇1则1
- 任意整数|0 还是本身
- 任意负数|负数 还是负数
- ^ 按位异或
- 相同则0,不同则1
- 一个属按位异或两次等于他自身
- 两个数交换
- 中间变量
- 求和
- x=x+y y=x-y x=x-y
- 按位异或
- x=x^y y=x^y x=x^y
- ~ 按位取反
- 每一位按位取反
- << 按位左移
- 无论正负,向左移动几位,就在最右边添加几个0
-
无符号右移
- 无论正负数,向右移动极为就在最高位添加几个0
- & 按位与
六、三目运算符
- 一元(~a)
- 二元(a+b)
- 三元(一定会有返回值,且仅有一个值)
- 格式
- 布尔表达式?表达式1:表达式2
- 执行流程
- 先计算布尔表达式,如果结果位true则执行表达式1,如果结果为false,就执行表达式2
- 注:
- 三木运算符只会返回一个值
- 三目运算符可以嵌套使用
- 当没有接受值类型时,两个表达式类型可以任意
- 如果两个表达式类型都是基本数据类型,那么就会有类型提升
- 格式
七、运算符的优先级
- ()
- 一元 ++ – !~ 自右向左
-
- / %
- 加减
- 移位
- 关系
- 相等判断
- 按位与或
- 按位异或
- 按位或
- 逻辑与
- 逻辑或
- 三目
- 赋值
- 逗号
八、心灵鸡汤
只有一条路不能选择那就是放弃的路;只有一条路不能拒绝那就是坚持的路。
感谢阅读,水平有限,只是记录自己学习生涯中的漫漫IT路,如有错漏,还请不吝赐教