Java中的运算符
1,+ - * / %
特别注意:+ 不仅具有数字加法的意思,当遭遇String类型时,表示追加的意思
2,+= -= *= /= %=...
[他们能够保证左边的数据类型不发生改变 -》 隐式的强转]
3,++ --[自增自减运算符]
4,> < >= <= ! = != ==
!:非 !boolean
!true = false !false = true
5,&& || & |[逻辑运算符]
(1) &&和&之间的区别?
相同点:&&和&都是逻辑的与 相当于汉文中并且的意思
需要前后两个条件都成立才可以
不同点:&&叫做逻辑的短路与 有短路特性
短路特性:如果通过前面的条件可以得出最终结果的话
后面的条件直接舍弃 不再判断
(2)|和|之间的区别?
相同点:||和|都是逻辑的或 相当于汉文中或者的意思
左右两边只需要一个条件成立就可以
不同点:||都短路特性:
6,& | ^ ~[按位运算符]
当运算符两边都是boolean类型的判断的时候,此时的运算符表示逻辑运算符
当运算符两边都是数值的时候 此时的运算符作为按位运算符
基本用法:
&:按位的与 上下都为1的时候 才写1
System.out.println(9 & 5);//1
9:8+1=1001
5:4+1=0101
0001
|:按位的或 上下只要有1就写1
System.out.println(9 | 5);//13
9:1001
5:0101
1101 8+4+1
^:按位的异或 上下只要不一样就写1
System.out.println(9 ^ 5);//12
9:1001
5:0101
1100 8 + 4
~:按位的取反 0-》1 1-》0
byte x = 9;//00001001 -> 11110110
重点:
&:某些情况下可以取代%的元素
某些情况:当我们拿着一个数%2的n次方数的时候
其实相当于我们拿着这个数&2的n次方数-1的结果
x % 64 == x & 63
7, >> << >>>[位移运算符]
<<相当于乘以 >>相当于除以 移动多少位相当于乘以/除以
2的几次方数
>>和>>>之间的区别?
>>叫做有符号右移 移动之后的空缺的高位看原本的符号位
byte x = 55;x >> 2
55:32 + 16 + 4 + 2 + 1 = 00110111
00110111
00001101
byte x = -55; x >> 2
-55 = -1 - 54 = -1 - 32 - 16 - 4 - 2 = 11001001
11001001 >> 2
11110010
>>>叫做无符号右移 移动之后空缺的高位直接补0
byte x = 55;x >>> 2
00110111
00001101
byte x = -55;x >>> 2
11001001
00110010
8,? : [三目运算符]
1 ? 2 :3
第一部分永远是boolean类型的判断
当第一部分位true的时候 执行第二部分
当第一部分位false的时候 执行第三部分
当二三部分类型不一样的时候 底层会先统一单位
然后做运算