java运算符
定义: 用于表示数据的运算、赋值的一系列符号。
分类
一、算数运算符
算数运算符
+ - * / % (取余运算)
++ , –
++ : 自身加一
–: 自身减一
i++ 和 ++i
i++ : 先赋值 后+1
++i : 先+1 后赋值
优先级 : 单目>双目>三目
单目 :只有一个操作数, 比如 ++ 和 –
双目:两个操作数 , 比如 1+2
! 记住i++与++i的不同
int s = 100;
// i++ : 先赋值 后+1
// ++i : 先+1 后赋值
s = s + s++;
//s=100+100
System.out.println(s);
二、关系运算符
关系运算符
返回值是boolean类型,只有true 和false两种。
=是赋值,==是比较是否相等。
当==用于比较引用类型时,比较的是其内存地址。
三、逻辑运算符
与 &:两个操作数相与,如果都为true,则为true
或 |:两个操作数相或,有一个为true,则为true
异或 ^:相异为true,两个操作数不一样就为true,相同为false
短路&& 和 逻辑& 区别?
1.短路与,从第一个操作数推断结果,只要有一个为fase,不再计算第二个操作数
2.逻辑与,两个操作数都计算
短路|| 和 逻辑| 区别?
1.短路或,从第一个操作数推断结果,只要有一个为true,不再计算第二个操作数
2.逻辑或,两个操作数都计算
四、位运算符
位运算符
&:位与,两边都为true,结果才是true。
|:位或,两边只要有一个为true ,结果就是true。
!:位非,取反,!true结果为false。
^ :位异或,两边不一样时结果为true。
~:按位非,0 的二进制是 : 0000 0000 , ~0 之后, 1111 111, 这是补码,补码-1 得到反码 1111 1110 , 原码 1000 0001 就是-1。
-
右移运算符(需要考虑符号位,符号位是不动的)
8>>2 结果是2 // 先转换成二进制,0000 1000 1往右移 (右删左加 正数补0 负数补1) 成为0000 0010 -
<<左移运算符 同上取反
-
>>>右移运算符 (不看符号位) 只补0 不补1 正数转变是不受影响 和>>一样 ; 负数全变为正数 -1 >>> 1 : 001111 11
-
逻辑比较
&&: 且 ,短路与 运算时结果和&一样。 过程计较时,在&&中,如果第一个的值为false,第二个就不用看了 ,但是在&中,第二个也会执行。 -
||:或,短路或 运算结果和|一样,但是在运算时,在||中,如果第一个为true,第二个就不用看了;但是在|中第二个仍然会运行。 &: 两边也可以是数字进行比较,但是在进行与运算时,要把两边的数字转换为二进制,然后每一位进行比较,都为1就取1,否则取0. 8:0000 1000 9:0000 1001 结果: 0000 1000