2018-05-23 17:13:27
算数运算符
。执行基本数学运算符
。。+:加;还可以作为字符串的连接运算符
。。-:减
。。*:乘
。。/:除
*如果两操作数都是整数,则结果为截断取整数;如19/4=4
*如果两个操作数都是整数,则除数不能为0,否则引发除以0异常;a/0异常
*如果操作数存在浮点数,则计算结果为浮点数,且允许除数为0/0.0,得到结果为正无穷大或负无穷大
。。%:求余
*求余结果未必是整数
*如果两个操作数都是整数,则求余运算第二个操作数不能为0,否则引发除以0异常;a%0异常
*如果操作数存在浮点数,则计算结果为浮点数,且允许求余运算第二个操作数为0/0.0,得到结果为非数NaN :
*0/0.0对零以外的任何数求余都得到0/0.0
*++:自加
**单目运算,只能操作一个操作符
**只能操作单个数值型变量,不能操作常量或表达式
**在操作数左边,先加1,再将操作数结果放入表达式运算中
**在操作数右边,先代入表达式,再将操作数加1
**例
*--:自减
**同自减
*复杂数学运算—借助java.lang.Math类工具方法
**Math.pow(a,i)-求a的i次方
**Math.sqrt(a)-a的平方根
**Math.random()-0~1之间的随机数
**Math.sin()-a的sin函数值
赋值运算符
。=
。扩展后的赋值运算符
。。+=:x+=y等同于x=x+y
。。-=:x-=y等同于x=x-y
。。*=:x*=y等同于x=x*y
。。/=:x/=y等同于x=x/y
。。%=:x%=y等同于x=x%y
。。&=:x&=y等同于x=x&y
。。|=:x|=y等同于x=x|y
。。^=:x^=y等同于x=x^y
。。<<=:x<<=y等同于x=x<<y
。。>>=:x>>=y等同于x=x>>y
。。>>>=:x>>>=y等同于x=x>>>y
位运算符
。&-按位与:当两位同为1为1
。|-按位或:有一位为1则为1
。~-按位非:取反
。^-按位异或:两位相同返回0,不同返回1
。。两个操作数二进制码右对齐,相同为1,不同为0
。。如1110
与 1111
结果0001
。<<-左移运算符:将操作数的二进制码整体左移指定位数,左移后右边空出来的位以0补充,超出部分截断
。。原码:对应二进制编码
。。反码:符号位不变,原码按位取反
。。补码:反码+1
。。计算机中以补码存储负数
。。整数补码、原码相同
。>>-右移运算符:将操作数的二进制码整体右移,左边空出来的位以符号位位填充
。。如果操作数原来为正数,则左补0
。。如果操作数原来为负数,则左补1
。>>>-无符号右移运算符:将操作数二进制码右移指定位数,左补0填充
。移位运算注遵循规则
。。对于低于int类型(byte、short、char)的操作数自动转换为int类型后再转换
。。对于int类型的整数移位a>>b,当b>32时,系统先用b对32求余(int类型32位),得到结果为真正移位数
*a>>33和a>>1结果相同;
*a>>32和a结果相同
。。对于long类型的整数移位a>>b,当b>64时,系统先用b对64求余(long类型64位),得到结果为真正移位数
*a>>65和a>>1结果相同;
*a>>64和a结果相同
。注意
。。当进行移位运算时,只要被移位的二进制码没有发生有效位的数字丢失(对于整数而言,通常被移出的位都是0)
。。左移n位相当于乘以2的n次方
。。右移n位相当于除以2的n次方
。。右移更容易发生有效数字丢失(personal)
比较运算符
。判断两个常量或变量的大小,结果为布尔值(true/false)
。Java支持比较运算符有
。。>:只支持两边操作数为数值类型
。。>=:只支持两边操作数为数值类型
。。<:只支持两边操作数为数值类型
。。<=:只支持两边操作数为数值类型
。。==:
*如果两个比较操作数都是数值类型,即使数据类型不同,只要值相等也将返回true
**97==‘a’;返回true
**5.0=5;返回true
*如果两个操作数都是引用类型,只有当两个操作数类型具有父子关系时才可以比较,且两个操作数必须指向同一个对象才会返回true
*支持boolean类型的比较,如true==false;返回false
*基本类型变量、值不能和引用类型变量、值进行比较
*boolean类型变量、值不能和其他任意类型变量、值进行比较
。。!=:
*进行比较的两个操作数都是数值类型,不论数据类型是否相等,只要值不同返回true
*两个操作数是引用类型,只有当两个引用变量的类型具有父子关系才可以进行比较,只要两个人引用指向不同的对象就会返回true
逻辑运算符
。&&:与
。。两个操作数都为true返回true
。&:不短路与
。。作用与&&相同,但不会短路
。||:或
。。两个操作数中有一个为true,则返回true
。|:不短路或
。。作用与||相同,但不会短路
。!:非
。。只需要一个操作数,如果操作数为true则返回false
。^:异或
。。当两个操作数不同时返回true
。逻辑运算符&&、||、!与位运算符&、|、~区别
。。逻辑运算符先将操作符转换为boolean类型,再进行先关操作
。。位运算符将操作符转换成二进制码,然后右对齐做相应处理
。短路逻辑运算符与非短路逻辑运算符
。。以非短路|和短路||为例
*在进行非短路或操作时,对操作符两边的两个操作数都要进行判断,则在该例中b++得到处理
*在进行短路或操作时,先进行操作符左边的操作数结果判断,如该例中左边操作数为true,则直接给出结果true,右边操作数结果不进行处理,即b++没有得到计算
三目运算符
。?:
。。(expression)?if-true-statement:if-false-statement
。。对逻辑表达式进行判断,如果为true则返回第二个操作数值,否则返回第三个操作数的值
。。if else的精简表达
运算符的结合性和优先级
。Java语言大部分运算符是从左到右结合
。单目运算符、赋值运算符、三目运算符是从右到左结合
。运算符优先级—上一行优先级总高于下一行优先级
运算符说明 | Java运算符 |
分隔运算符 | . [] () , ; |
单目运算符 | ++ -- ~ ! |
强制类型转换 | (type) |
乘法/除法/求余 | * / % |
加法/减法 | + - |
移位运算符 | << >> >>> |
关系运算符 | < <= > >= instanceof |
等价运算符 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
条件与 | && |
条件或 | || |
三目运算符 | ?: |
赋值 | = |