算術運算符:+,-,*,/,%(余數),++(自增),--(自減)
賦值運算符:=
關系運算符:>,<,>=,<=,==,!= instanceof
邏輯運算符:&&,||,!(與,或,非)
位運算符:&,|,^,~,>>,<<,>>>
條件運算符:?,:
擴轉賦值運算符:+=,-=,*=,/=
加減乘除
操作時需要注意運算結果是否會有浮點數
計算中,如果有高級的數據類型參與,那計算出來的結果類型,一定是最高的那個數據類型,默認為int類型
public class Dem1 {
public static void main(String[] args) {
//二元運算符
int a = 10;
byte b = 20;
int c = 25;
long d = 25;//long類型是他們中最高的類型,所有有long類型參與的計算,結果都為long,否則就默認int類型
System.out.println(a+b);//結果為 30
System.out.println(a-c);//結果為-15
System.out.println(d*b);//有d參與,為long類型,結果為500
System.out.println(a/(double)b);//結果為小數,所以要把int類型強轉double。結果為0.5
System.out.println(c%a)//c除以a的余數是5,所以結果為5
}
}
關系運算
在關系運算符中,大於,小於,等於和不等於是用布爾值的false和true來輸出結果。
public class Dem3 {
public static void main(String[] args) {
//關系運算符的返回結果: 正確,錯誤 (布爾值)
int a=10;
int b=20;
int c=21;
System.out.println(a>b);//大於 false
System.out.println(a<b);//小於 true
System.out.println(a==b);//是否相等 false
System.out.println(a!=b);//是否不相等 true
}
}
自增,自減
++,--,被叫做自增,自減。以自增為例,一個自增相當於加1,當一個變量a,在++a和a++兩種表達時,算法的路徑會不一樣。++a是先計算,再賦值。a++是先賦值,再計算。在一個方法中,++會從上到下積累,在輸出句之前出現多少次++,最后的a就會加了多少個1。自減同理
public class Dem4 {
public static void main(String[] args) {
//++ -- 自增,自減 一元運算符
int a = 3;//給a賦初始值
int b = a++;//先把a的值賦給b后a再+1
System.out.println(a);//輸出a等於4
int c = ++a;//先+1后再給c賦值,就是4+1,再賦值給c。
//此時c的值是上面a++得到的值4,再以4的值以++a計算后得到5
System.out.println(a++);//得到值為5
System.out.println(a);//得到值為6,
System.out.println(b);//得到值為3
System.out.println(c);//得到值為5
//冪運算的寫法
double pow=Math.pow(3,2);
System.out.println(pow);//得出結果9.0
}
}
邏輯運算
&& || !稱為與,或,非。以布爾值進行運算。 與 是代表A與B,或 是代表A或者B,非代表取反,正為負,負為正。
與在計算時,需要A與B都為真,結果才為真。如在第一個變量就檢測出為假,則不作后面的運算,直接為假
或在計算時,A或者B有一個為真,則結果為真。如在第一個變量檢測出為真,則不作后面的運算,直接為真
非在計算時,如計算結果為真,則輸出為假。結果為假,則輸出為真。
短路運算
求證 “與”“或”在運算時,檢測到第一個變量為假,或者真時,就不會再對后面的變量進行運算
public class Dem5 {
public static void main(String[] args) {
//邏輯與運算 與 或 非
boolean a = true;
boolean b =false;
System.out.println("a && b:"+(a&&b));//與:兩個變量都為真,結果才為true
System.out.println("a || b:"+(a||b));//或:其中一個變量為真,結果就為true
System.out.println("!(a&&b):"+!(a&&b));//如結果為真,則變為假。為假則變為真
//短路運算:
int c = 5;
boolean d =(c<4)&&(c++<4);
//運算:c小於4為錯誤,在&&之前就被系統檢測到false,所以不執行后面的c++變量
System.out.println(d);//結果為false
System.out.println(c);//結果為5 則證明在&&之前就短路了
}
}
位運算
& 與 | 或 ^亦或 ~取反 <<左移 >>右移 用於二進制邏輯運算
A = 0011 0110
B = 1010 0100
A&B =010 0100(兩個都為1,結果才為1)
A|B = 1011 0110(有一個為1,結果就為1)
A^B = 1001 0010(相同則為0,不同則為1)
~B = 0101 1011(和原本的數字相反)
左移和右移<< >>
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0000 1001 9
.......
0001 0000 16
由此可以看出,左移<<相當於*2,右移>>相當於/2
public class Dem6 {
public static void main(String[] args) {
System.out.println(2<<3);//輸出結果為16
System.out.println(16>>3);//輸出結果為2
}
}
擴展賦值運算符
+=,-=,*=,/= +=是求和,如 a+=b,就是代表a=a+b。但求出的數值會累積疊加,這里和自增自減相同,在一個方法里面,輸出語句之上的變量都會疊加。另外三個運算符也是同理。
public class Dem7 {
public static void main(String[] args) {
int a = 10;//給a賦初始值
int b = 20;//給B賦初始值
a+=b;
System.out.println(a);//結果為30 a的10+b的20
b+=a;
System.out.println(b);//結果為50 b的20+a的30
a*=b;
System.out.println(a);//結果為1500 a的30*b的50
System.out.println(""+a+b);//輸出結果為150050
//在該運算符兩側,只要有前面出現了String類型,就會把其它類型都轉換為String類型再進行連接,所以得出結果為1020
}
}
三元運算符
? : 為三元運算符
舉例 a ? b : c
如果a為真,結果就為b,如果為假,則結果為c
package operator;
//三元運算符
public class Dem8 {
public static void main(String[] args) {
int score = 59;
String t = score<60?"不及格":"及格";
System.out.println(t);//score<60 為真,結果為"不及格"
}
}