1. 程式人生 > 其它 >四、JavaSE語言基礎之運算子

四、JavaSE語言基礎之運算子

什麼是是運算子

運算子:用於資料運算的符號,運算是一種處理。(注:浮點型資料(float、double)進行運算會出現精度丟失的情況)

運算子大致可分為以下六種:

一、算術運算子:+、-、*、/、%、++、--

這裡只針對於在java中有著特殊含義的算術運算子進行刪除,乘、除等與日常生活中概念一致的運算子不再特殊說明

1、+(加號)

在Java中+具有三種含義:

①數學意義上的加法運算;

②正數;

③字串拼接;

2、%(求餘,取模)

n%m//運算結果為n除以m除不盡的部分,結果取值範圍為[0,m);

//幾行關於被除數與除數取正/負數,其結果正/負的程式碼

System.out.println("6.4%2.0="+(6.4%2.0));//0.4

System.out.println("-6.4%2.0="+(-6.4%2.0));// -0.4

System.out.println("6.4%(-2.0)="+(6.4%(-2.0)));//0.4

System.out.println("-6.4%(-2.0)="+(-6.4%(-2.0)));//-0.4  
// 根據以上程式碼,我們可以得知:餘數是被除數的一部分,餘數的正負取決於被除數 

3、++(自增)、--(自減):

關於自增與自減,需牢記以下兩段話

++在前,先自增,後運算;

++在後,先運算,後自增;

int a=1;
a++;//等價於a=a+1;完全等價於a=(a的型別)(a+1)

byte b=1;
b++;//b++;完全等價於b=(b的型別)(b+1);  

二、賦值運算子:=、+=、-=、/=、%=、*=...

int  a=1,b=2;
a+=b;//等價於a=a+b;完全等價於(a的型別)(a+b);

byte  c=1,d=2;
c+=d;//c+=d完全等價於:c=(c的型別)(c+d); 

賦值運算子(=)成功賦值的四種情況:

1、直接賦值:左右型別一致

2、左邊精度高於右邊精度(自動型別轉換情況1)

3、左邊是byte/short/char右邊是int常量值(自動型別轉換情況2)

4、強制型別轉換:低精度變數=(低精度變數的型別)高精度資料

三、比較運算子:>、>=、<、<=、==、!=

比較運算子的結果是boolean(true/false)型別的值

在java中有著特殊含義的比較運算子:

==(恆等號)判斷兩邊的值是不是相等

!=(不等號)判斷兩邊的值是不是不相等

四、邏輯運算子:&、&&、|、||、^、!

邏輯運算子操作boolean型資料,結果也是boolean型別的資料

&(單與)、&&(雙與):兩邊只要有一個false結果就是false

|(單或)、||(雙或):兩邊只要有一個true結果就是true

^(異或):兩邊不同則為true兩邊相同則為false

!(取反、非)

&&和&區別:

&&代表著邏輯運算子的雙與,&代表著邏輯運算子的單與和位運算子的單與;

相同之處:作為邏輯運算子時:&&和&的結果一樣(兩邊只要有一個false結果就是false)

不同之處:

1、&可作為位運算子(位運算子運算元字的二進位制)

2、&&存在邏輯短路的現象,如A&&B當通過A就能知道結果時B就不再執行直接給出結果

五、位運算子:與(&)、或(|)、異或(^)、取反(~)、左移(<<)、右移(>>)、無符號右移(>>>)

位運算子操作的是整數的二進位制,0為false,1為true;

(&)運算時相同位之間實質上就是兩個boolean值的運算,其判別與邏輯運算中的與相同,只要有一位為0其結果即為0

(|)運算與與運算相似,與邏輯運算中的或判別相同

異或(^)運算時,對應位數的值相同則為0,不同則為1

取反(~)運算,0、1互換

<<:左移幾位就乘以幾次2;

>>:右移幾位就除以幾次2;

>>>:右移零填充

六、三元運算子:boolean表示式?值1:值2

如果boolean表示式結果是true則取值1,反之取值2;

運算後結果的資料型別

運算後結果的型別遵從以下兩個原則:

1、byte、short、char不能直接參加運算,編譯器會自動將它們提升為int;(在前面加上若干個位元組的0)

2、運算後的結果資料型別取決於參與運算的精度最高的資料型別;