Java运算符优先级

算数运算符
+(加)、-(减)、*(乘)、/(除)、%(取余)

注意事项:
1.当两个整数进行除法运算时候,结果只取整数部分,小数部分舍弃。
2.当希望结果中保留小数部分,具体方法如下:
a.将其中一个操作数强转为double类型在做运算
b.将其中一个操作数乘以1.0提升为double类型再运算(推荐)

3. 0不能作为除数,否则产生 java.lang.ArithmeticException(算数异常): / by zero
但是0.0可以做除数但结果是无穷大的,因此以后开发中避免使用0和0.0作为除数

a.当+两边的操作数中只要有一个字符类型,则按照字符连接符来处理,结果依然是字符
b.将+两边的操作数都不是字符串时,则按照算数运算符来处理。

字符串连接运算符
“+”可以是实现字符串的连接。同时可以实现字符串与其他数据类型的相连。

自增减运算符
++(自增)、--(自减)

+ 表示加法运算 ++ 表示自增,也就是让当前变量自身的数值加1.
- 表示减法运算 -- 表示自减,也就是让当前变量自身的数值减1.
-
ia + ib ia++;

++(--)可分为前++ 和后++(--)

++ia 当++在前面的时候先进行加1的操作,然后再进行其他运算;

ia++ 当++再后面的时候先其他运算,然后再进行加1的操作

--ia 当--在前面的时候先进行减1的操作,然后再进行其他运算;

ia-- 当--在后面的时候先进行其他运算操作,然后再进行减1;

单独使用变量进行自增减的操作,建议尽量不要与其他运算符混合使用

赋值运算符
=、+=、-=、*=、/=、%=
赋值运算符将右边表达式的运算结果赋值给左边变量的运算符

<1>简单赋值
= 表示赋值运算符,用于将=右边的数据赋值给=左边的变量,覆盖该变量原来的数值。

<2>复合赋值
+=、-=、*=、/=、%=

a+=1; 等效于 a=a+1;

关系/比较运算符
>、<、==、<=、!=、>=
>
比较运算符是用来判断两个表达式或值大小关系的运算符。

> 表示是否大于运算符
< 表示是否小于运算符
== 表示是否等于运算符
<= 表示是否小于等于运算符
!= 表示是否不等于运算符
>= 表示是否大于等于运算符

关系运算符参与的表达式最终结果为boolean类型, true(真) 和false(假)

逻辑运算符
逻辑运算符操作数为boolean表达式

Java提供的逻辑运算符有 &和&&(与) |和||(或) !(非)

&和&&(与) 表示逻辑与运算符,相当于“并且” ,同真为真,一假为假
|和||(或) 表示逻辑或运算符,相当于“或者”,一真为真,同假为假。
!(非) 表示逻辑非运算符,相当于取反,真为假 ,假为真

&& 和 || 具备短路的特性: 如果通过第一个表达式的值即可得出最后的结果,则补计算第二个表达式。

短路的特性:
逻辑与:若第一个条件为假则整个表达式一定为假,此时跳过第二个条件的执行。
逻辑或:若第一个条件为真则整个表达式一定为真,此时跳过第二个条件的执行


条件/三目运算符
<1>语法格式:
条件表达式 ? 表达式1 : 表达式2

<2>执行流程
判断条件表达式是否成立
= 若成立,则执行表达式1
= 若不成立,则执行表达式2

a = 3 > 2 ? 5 : 6;
3>2为真,所以a=5

移位运算符
左移(<<) 、算数右移(>>) 、逻辑右移(>>>)

移位运算针对二进制移动
<< - 表示左移运算符,用于讲该整数的二进制向左边移动,右边补0 (丢去最高位,0补最低位)

举例:
5<<5

0000 0101(5的二进制)
0000 1010(第一次移动)
0001 0100(第二次移动)
0010 1000(第三次移动)
0101 0000(第四次移动)
1010 0000(第五次移动) ---- 结果 160 = 128+32

>> -- 表示右移运算符,用于将整数的二进制向右移动,左边补符号位.
>>> -表示无符号右移运算符,忽略符号位,用于将整数二进制向右边移动,左边补0

位运算符
&按位与、 |按位或 、^按位异或、 ~按位非,按照二进制逐位进行二进制运算。

&按位与 - 用于将整数的二进制进行与运算 , 同1 为1 ,一0为0

举例:
5&8
0000 0101
0000 1000
-------------------
0000 0000 0

|按位或
一1为1,同0为0
运算规则: 0|0 = 0 ; 0|1 = 1; 1|0 = 1 ; 1|1 = 1;

举例
5|8
0000 0101
0000 1000
---------------
0000 1101 --结果13

^按位异或
相同为0 不同为1
运算规则: 0^0 = 0; 0^1=1; 1^0 = 1; 1^1 = 0;
举例:
5^8
0000 0101
0000 1000
---------------
0000 1101 ---13

~按位非
按照二进制取反运算,1为0 ,0为1

举例:
^8---
0000 1000(二进制)
1111 0111 (1为0 ,0为1)(现在是负的二进制,转换成十进制输出)
0000 1000 (按位取反)
0000 1001(加一)
9 (是进制整数)
-9 (前面添加符号)

^-10----
0000 1010 (-10的绝对值转换为二进制)
1111 0101 (按位取反)
1111 0110 (加一)
0000 1001 (反码)
9 (转换为十进制)



反码:
正数的反码就是它本身
负数的反码,就是将原码的非符号部分,每一位取反


补码:
正数的补码也是它本身
负数的补码,符号位不变,其余每一位取反之后,最后加一(反码+1)


运算符优先级
运算符分类 结合顺序 运算符

分隔符 左结合 . [] ( ) ; ,

一元运算符 右结合 ! ++ -- - ~

算术运算符/移位运算符 左结合 * / % + - << >> >>>

关系运算符 左结合 < > <= >= instanceof(Java 特有) = = !=
逻辑运算符 左结合 ! && || ~ & | ^
三目运算符 右结合 布尔表达式?表达式1:表达式2
赋值运算符 右结合 = *= /= %= += -= <<= >>= >>>= &= *= |=

上一篇:C#ASP.NET检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80080005


下一篇:23.09.2021 图像原理