JAVA运算符包括 算术运算符,赋值运算符,关系运算符,逻辑运算符,位运算符,三目运算符
一:算术运算符:
+,-,*,/,%,++,--
+ 加法运算 - 减法运算
* 乘法运算
/ 整除运算,只获取整数部分
% 取余运算
++:自加1
当++在前的时候,先自加1,再做赋值操作,当++在后的时候,先做赋值操作,再做自加1
--:自减1
当--在前的时候,先自减1,再做赋值操作,当--在后的时候,先做赋值操作,再做自减1
二:赋值运算符: = , +=, -=, *=, /=, %=
其中我们一直在使用的也是最常用的:=
+= int a += 10;
int a = 10;
a += 20;
这里实际上可以看作为a的值加上了一个20再赋值给a,但是不能完全等于 a = a + 20; 为什么不能完全等于,例题。 short s=1, s = s+1; short s=1, s += 1; 上面两个代码有没有问题,如果有,那里有问题 第一个有问题,因为变量参与运算,首先会提升数据类型,然后做运算。所以 s = s+1;s会提升到int类型然后再做加法运算,最终的结果是int类型,所以拿short类型接收会报错,所以要想成功赋值,就得强制类型转换。 第二个代码没有问题,是因为内部自动包含了强制类型转换,s+=1 ===> s = (s的数据类型)(s+1)其余的赋值运算符同理,都是通过与自身进行加减乘除运算,再将值赋给自身。
三:关系运算符:
==,!=,>,<,>=,<=
注意事项:
1、关系运算符的表达式的结果是一个boolean类型,要么是true,要么是false
2、==不能少写,一个=是赋值运算符,==才是关系运算符
3、赋值的时候要注意类型问题,关系运算符表达式的结果是boolean类型,所以接收的时候只能是boolean类型的变量接收
四:
逻辑运算符:
&,|,^,!,&&,||
逻辑运算符的两边放的是boolean类型的值,计算的结果也是一个boolean类型的值
&: 参与运算的时候,两边有false,则false,两边都做运算,即只有当两边都为ture时,才为ture。
|: 参与运算的时候,两边有true,则true,两边都做运算,即只有当两边都为ture时,才为ture。
^: 参与运算的时候,相同为false,不同为true,两边都做运算,即两边同为ture,或同为false,则为false,若一边为ture,一边为false,则为ture。
!: 将true变成false,false变成true.
&&: 短路与,结果和单个 & 结果一样,有false则false,但是执行的东西不一样,
当&&左边的表达式结果为false的时候,结果是false,右边不执行
||: 短路或,结果和单个 | 结果一样,有true则true,但是执行的东西不一样,
当||左边是true的时候,右边不执行,结果是true.
五:位运算符: <<,>>,>>>,&,|,^,~
位运算符: <<: 左移,二进制左移,右边用0补齐,多出来的丢弃 >>: 右移,最左边最高位是0用0补齐,最高位是1就用1补齐,多出来的丢弃。 >>>: 无符号右移,无论左边最高是0还是1,都用0补齐,多出来的丢弃。
注意,移动的是其二进制补码,不是其二进制源码;
&,|,^,~
例用3和4作比较
3的源码为00000011
4的源码为00000100
因为3,4为正数,所以其源码反码补码相同。
&,|,^,~:运算比较用补码作比较。
& 运算:有0则0
00000011
&
00000100
---------------
00000000
结果是 : 0
| 运算:有1则1
00000011
|
00000100
--------------
00000111
结果是:7
^ 运算:相同则0,不同则1
00000011
^
00000100
--------------
00000111
结果是:7
~ 运算:1变成0,0变成1
00000011
~
-------------
补码: 11111100
已知补码求原码:
反码: 11111011
原码: 10000100
结果是:-4
六:三目运算符:又称之为三元运算符
格式:(关系表达式)?表达式1:表达式2;
如果关系表达式的结果为true,运算后的结果是表达式1;
如果关系表达式的结果为false,运算后的结果是表达式2;
注意事项:
1、三目运算符表达式的结果数据类型由三目运算符表达式1和表达式2中最大的数据类型决定的。
2、关系表达式一定只能是boolean类型



