Java基礎:基本運算子
二元運算子
-
Java語言支援如下運算子:
-
算術運算子:+,-,*,/,%,++,--
-
賦值運算子:=
-
關係運算符:>,<,>=,<=,==,!=,instanceof
-
邏輯運算子:&&,||,!
-
位運算子:&,|,^,~,>>,<<,>>>
-
條件運算子:? :
-
擴充套件賦值運算子:+=,-=,*=,/=
-
-
Ctrl + D:複製當前行到下一行
-
二元運算子
-
加:+
-
減:-
-
乘:*
-
除:/
-
注意:除法運算產生小數時,需要強轉一下,轉任意一個數就行,剩下的會自動型別轉換,否則小數部分丟失
-
模運算(取餘):%
-
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);//30
System.out.println(a-b);//-10
System.out.println(a*b);//200
System.out.println((float)a/b);//0.5 //強轉
//取餘,模運算
System.out.println(c%a);// c/a 25/10=2...5
-
計算結果型別問題
-
如果整數運算裡有Long型別,結果為Long;
-
如果整數運算裡沒有Long型別,結果都為Int;
-
如果運算裡有Double,結果一定為為Double;
-
如果運算裡有Float沒有Double,結果一定為Float;
-
-
加號 + 的特殊用法
-
字串連線符 + ,"String1"+"String2",用來連線兩個字串的符號
-
字串與變數用"+"連線時,字串前面+號還是運算子,而字串後面的+號全部變為字串連線符
-
括號內的運算子優先進行
-
int a = 10;
int b = 20;
System.out.println(""+a+b);//1020
System.out.println(a+b+"");//30
System.out.println(a+b+""+a+b);//301020
System.out.println(a+b+""+(a+b));//3030//括號內優先進行
System.out.println(a+b+""+a*b);//30200//其他運算子不受影響
關係運算符
-
關係運算符的返回結果:正確,錯誤(true,false),即一個布林(boolean)型別
-
關係運算符 經常與 if 判斷 組合使用
-
大於:> 大於等於:>=
-
小於:< 小於等於:<=
-
等於:==
-
不等於:!=
//關係運算符 返回結果:正確,錯誤 -- 布林值
//與if大量使用
int a = 10;
int b = 20;
int c = 22;
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
一元運算子 與 Math類
-
一元運算子即 自增自減 非常重要,非常重要,非常重要
-
a++ :在這一行中不執行自增操作,自增在下一行才執行
-
++a:自增先執行,再進行之後的操作。(優先順序高)
-
Math類在很多運算時會用到
package operator;
public class Demo04 {
public static void main(String[] args) {
//非常重要
// ++ -- 自增,自減 一元運算子
int a = 3;
int b = a++; // a++:執行完這行程式碼後,先給b賦值,再自增
//b = a++;等價於 b = a; a = a+1;
System.out.println(a);
System.out.println(b);
System.out.println("\n");
int c = ++a; //++a:執行完這行程式碼前,先自增,再賦值給b
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println("\n");
//冪運算 2^3 2*2*2 = 8,很多運算我們會使用一些工具類來操作
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
邏輯運算子
-
與:&& ,兩邊都為真,則結果為真
-
或:|| ,兩邊都為假,則結果為假,否則結果為真
-
非:! ,取反,運算元為真則結果為假,運算元為假則結果為真
//與(and) 或(of) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a && b));//false //括號裡面優先運算//邏輯與運算:兩個都為真,則為真
System.out.println("a || b:"+(a || b));//true //邏輯或運算:一個為真,則為真,兩個為假則為假
System.out.println("!(a && b):"+!(a && b));//true //邏輯非運算:如果為真則為假,如果為假則為真
-
與:短路運算
//短路運算
int c = 5;
boolean d = (c<4)&&(c++<4);//前半部分(c<4)為假,與運算有假必為假,則不執行後面的(c++<4),即短路
System.out.println(c);//c++不執行,c=5
System.out.println(d);//false
位運算
-
按位與:& :兩個都為1則結果為1,只要有0結果為0
-
按位或:| :只要有1結果為1,兩個都為0則結果為0
-
按位取反(非):~ :0變1,1變0
-
異或:^ :相同為0,不同為1
位運算: &(與),|(或),~(非,取反)
A=0011 1100
B=0000 1101
A&B=0000 1100 //按位與
A|B=0011 1101 //按位或
A^B=0011 0001 //位異或
~B =1111 0010 //按位非,取反
-
效率極高的位運算:
-
乘以2相當於左移一個位 <<
-
除以2相當於右移一個位 >>
-
/*
效率極高的位運算!!!
<< *2 乘以2相當於左移一個位
>> /2 除以2相當於右移一個位
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
0000 0011 3
0000 0110 6
0000 1100 12
*/
//2^3 = 2*2*2 = 8,用位運算來代替,效率極高!
System.out.println(2<<2);
擴充套件賦值運算子
-
即偷懶運算子:+=,-=,*=,/=
-
a+=b :a = a+b
-
a-=b :a = a-b
-
a*=b :a = a *b
-
a/=b :a = a/b
三元運算子
三元運算子必須掌握
三元運算子必須掌握
三元運算子必須掌握
? :
x ? y : z :如果x為真,則輸出y;如果x為假,則輸出z。
int score = 60;
String type = score < 60 ? "不及格" : "及格";
System.out.print(type);//及格
運算子的優先順序
高——> | ——>低 | |||||
---|---|---|---|---|---|---|
括號 | 乘除 | 加減 | 關係運算符 | 邏輯運算子:非(取反) | 邏輯運算子:與 | 邏輯運算子:或 |
() | * / | + - | > < >= <= == != | ! | && | || |
int a = 10;
int b = 15;
int c = 20;
int d = 30;
System.out.println(a>b && a<c || c>b);// true //&&>||
System.out.println(a<b || a>c && c<b);//true //&&>||
System.out.println(!(a>b) && (a>c) );//false //!>&&