運算符包含6大類:算術運算符、賦值運算符、比較運算符、邏輯運算符、位運算符、三元運算符。下面分別介紹。
1.算術運算符
1.1 + - * /
- 對於除號“/”,它的整數除和小數除是有區別的:整數之間做除法時,只 保留整數部分而捨棄小數部分.
- 注意運算時的自動類型提升。
int i1=12;
int i2=5;
int result=i1/i2; //2
double result1=i1/(i2+0.0);//2.4
double result2=(double) i1/i2;//2.4
System.out.println(result);
System.out.println(result1);//
System.out.println(result2);//
1.2 %
- 如果對負數取模,可以把模數負號忽略不記,如:5%-2=1。 但被模數是 負數則不可忽略。此外,取模運算的結果不一定總是整數.
//正數取模爲正
5%2=1;
5%(-2)=1;
//負數取模爲負
-5%2=-1;
-5%(-2)=1;
1.3自增自減運算 ++,- -
- ++a和a++的異同
- ++a是先增1,再賦值;
- a++是先賦值,再增1;
- ++a不會改變a的類型例如:
short a=10;
a++;
++a;//都可以編譯通過,12
int a=10;
int b=++a;//a=11,b=11
//*******
int c=10;
int d=c++;//d=10,c=11;操作順序是c先賦值給d,然後自增1
//*******
int e=10;
e++;
int f=e;//f=11,e=11
//*******
int g=10;
++g;
int h=g;//g=11,h=11
//****************************
int a=10;
int b=(a++)+(++a);//可以拆分爲c=a++,d=++a,b=c+d
//c=10,d=12,a=12,b=22
System.out.println("a="+a);//12
System.out.println("b="+b);//22
2. 賦值運算符
包含 = ,+=,-=,*=,/=,%=
- 當“=”兩側數據類型不一致時,可以使用自動類型轉換或使用強制類型轉換原則進行處理。
- 支持連續賦值,連等。
int i,j;
i=j=10;
- += 等運算符,不會改變數據類型
//*********練習1
short s = 3;
s = s+2; // 編譯失敗
s += 2; //編譯成功
//*********練習2
int i=1;
i*=0.1;//不會改變數據類型,int i=1*0.1=0;
//*********練習3
int n=3,m=2;
n*=m++;//拆解爲n=n*m++;
//m先運算m++,符合先賦值,再增1,即n=3*2
System.out.println("n="+n);//6
System.out.println("m="+m);//3
//*********練習4
//*****************
int n=10;
n+=(n++)+(++n);//32
//拆解n=n+(n++)+(++n);
// 10+10+12
3. 比較運算符
4. 邏輯運算符
邏輯運算符針對的是,布爾型變量進行運算。
其中需要注意的是:
- “&”和“&&”的區別:
單&時,左邊無論真假,右邊都進行運算;
雙&時,如果左邊爲真,右邊參與運算,如果左邊爲假,那麼右邊不參與運算。 - “|”和“||”的區別同理,||表示:當左邊爲真,右邊不參與運算。
- **異或( ^ )**與或( | )的不同之處是:當左右都爲true時,結果爲false。 理解:異或,追求的是“異”!異或,當雙元爲異,輸出true;當雙元爲同,輸出false;