java入門-----運算子
拓展:Scanner類的使用
含義:Java給我們提供的一個類,這個類的功能就是在控制臺輸入資料
//創建Scanner類的物件
Scanner scan = new Scanner(System.in);
//呼叫功能
int i1 = scan.nextInt();//在控制臺輸入一個int資料
int i2 = scan.nextInt();//在控制臺輸入一個int資料
double d = scan.nextDouble();//在控制臺輸入一個double資料
String str = scan.next();//在控制臺輸入一個String資料
1. 算數運算子:
+、-、*、/ :加減乘除;
++ :表示自加1,即在自身的基礎上加1;
– :表示自減1,即在自身的基礎上減1;
% :求余數,例如10%3=1;
1.經典面試題
int a = 8; int b = (a++)+(++a)+(a*10); System.out.println(b);//8+10+100=112int i = 0 ; i = ++i; System.out.println(i);//i=1 /*底層實作: i = (int)(i+1); i=i; */int i = 0; i = i++; System.out.println(i); //i=0 /*底層實作: int temp = i; i = (int)(i+1); i = temp; */
拓展:
i++與i=i+1有何區別?
byte i=1; i++;//正常運行,i=1+1=2; i=i+1;//報錯,資料轉換 /* 代碼中出現的整數會被默認為int型,i++的底層運算為: i = (byte)(i+1);會根據左側變數型別自動進行強制轉換, i = i + 1;i+1的結果為int型,在賦值給byte型的i時,就會出現型別不兼容而報錯, */
2.賦值運算子:
= :賦值,即將右邊的值賦值給左邊的變數;
+=、-=、 *=、/= 、 %= :復合賦值;
例如:
int a=10; a+=10; // a = a+10 a-=10; // a = a-10 a*=10; // a = a*10 a/=10; // a = a/10 a%=10; // a = a%10經典面試題
int a,b; a = b = 100;//100賦值給b,b再賦值給a; System.out.println(a); //100 System.out.println(b);//100
short s=1; s = s+1; //資料轉換錯誤 short s=1; s += 1;//s = (short)(s+1);s=2; /* 代碼中出現的整數會被默認為int型,s += 1的底層運算為: s = (short)(s+1);會根據左側變數型別自動進行強制轉換, s = s+1;s+1的結果為int型,在賦值給short型的s時,就會出現型別不兼容而報錯, */賦值規則:
復合賦值 E1 op= E2等價于簡單賦值 E1 = (T)((E1) op (E2)),其中T是E1的型別,
3.關系運算子:
== :等于
!= 不等于、>大于、 <小于、 >=大于或等于、 <=小于或等于
注意:
- 關系運算子的結果都是boolean型別,true或者 false
- 不要將 == 用成 =
經典面試題
int x = 10; int y = 10; boolean flag = (x == y); System.out.println(flag);//true flag = (x = y);//x,y是int型,flag是Boolean型,Boolean型別不能與其他型別兼容,這里會報錯 System.out.println(flag);
boolean b1 = true; boolean b2 = false; boolean b3 = (b1 == b2); System.out.println(b3);//false boolean b4 = (b1 = b2);//b2賦值給b1,b1再賦值給b4 System.out.println(b4);//false
4.三目運算子/三元運算子
語法:
資料型別 變數 = (運算式)?值1:值2;
? 例如:
? int max = (a>b)?a:b;
理解:
? 運算式的結果必須是boolean型別
? true - 將值1賦值給變數
? false- 將值2賦值給變數案例:在控制臺輸入兩個int型別的數字,輸出最大值
//創建Scanner類的物件scan Scanner scan = new Scanner(System.in); //輸入兩個數字 System.out.println("請輸入第一個數字:"); int a = scan.nextInt(); System.out.println("請輸入第二個數字:"); int b = scan.nextInt(); //判斷大小 int max = (a>b)?a:b;//判斷a是否大于b,如果大于就回傳a,否則回傳b //輸出最大值 System.out.println("最大值為:" + max);
5. 邏輯運算子:
&(與)、&&(短路與)、|(或) 、||(短路或)、!(非)、^(異或)
規則:
& 和 && 規則: 兩個有一側為false,結果為false
| 和 || 規則 :兩側有一側為true,結果為true
^ 規則: 兩側相同為false,不同為true
!規則:置反,false變成true , true變成false
注意:
1.邏輯運算子運行結果都是boolean型別
2.&、&&、|、||、^ 兩側都是boolean型別資料
//&與:前后兩者都是boolean值,同時成立(true),結果才為true System.out.println(true & true);//true System.out.println(true & false);//false System.out.println(false & true);//false System.out.println(false & false);//false //&&短路與:前后兩者都是boolean值,同時成立(true),結果才為true System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false System.out.println(false && false);//false //& vs && //&:判斷前者為false后,才會判斷后者 //&&:判斷前者為false后,不會判斷后者,所以效率更高 //ArithmeticException - 算數類例外 System.out.println(false && 10/0>5); //|或:前后兩者都是boolean值,有一個成立(true),結果就為true System.out.println(true | true);//true System.out.println(true | false);//true System.out.println(false | true);//true System.out.println(false | false);//false //||短路或:前后兩者都是boolean值,有一個成立(true),結果就為true System.out.println(true || true);//true System.out.println(true || false);//true System.out.println(false || true);//true System.out.println(false || false);//false //| vs || //|:判斷前者為true,還會判斷后者 //||:判斷前者為true,不會判斷后者,所以效率更高 System.out.println(true || 10/0>5); //^異或:前后兩者都是boolean值,相同為false,不同為true System.out.println(true ^ true);//false System.out.println(true ^ false);//true System.out.println(false ^ true);//true System.out.println(false ^ false);//false //!非 - 置反 boolean bool1 = true; System.out.println(!bool1);//false boolean bool2 = false; System.out.println(!bool2);//true
6.字串拼接符
+兩側都是數值,此符號為算術運算子
int a=1,b=1,c=1; a = b + c; a = 1 + 2;+有一側或者兩側是字串,此符號為字串拼接符
System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12
7.位運算子:
&(與) 、|(或)、^(異或)、’<<’ (左移)、’>>’(右移)、’>>>’(無符號位右移)
含義:將十進制的資料轉換為二進制再進行運算
//&:同位比較,兩者為1,結果才為1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//23 byte - 0001,0111
byte result = (byte)(b1 & b2);
System.out.println(result);//17 - 0001,0001
//|:同位比較,兩者有1,結果就為1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//0001,1111
System.out.println(b1 | b2);//31 - 0001,1111
//^:同位比較,兩者相同為0,不同為1
byte b1 = 23;//0001,0111
byte b2 = 25;//0001,1001
//0000,1110
System.out.println(b1 ^ b2);//14 - 0000,1110
// &、|、^:前后兩者都是數值,該符號為位運算子
// &、|、^:前后兩者都是boolean值,該符號為邏輯運算子
//<<:整體向左移動n位,就用n個0補位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
System.out.println(b1 << 2);
//10 int:0000,0000,0000,0000,0000,0000,0000,1010
//40 int:0000,0000,0000,0000,0000,0000,0010,1000
//>>:整體向右移動n位,就用n個最高位補位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
System.out.println(b1 >> 2);
//10 int:0000,0000,0000,0000,0000,0000,0000,1010
//2 int:0000,0000,0000,0000,0000,0000,0000,0010
byte b2 = -10;//1111,0110
//-10 byte:1111,0110
//-10 int:1111,1111,1111,1111,1111,1111,1111,0110
//-3 int:1111,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2 >> 2);
//>>>:整體向右移動n位,就用n個0補位
byte b1 = 10;//0000,1010
//10 byte:0000,1010
//10 int:0000,0000,0000,0000,0000,0000,0000,1010
//2 :0000,0000,0000,0000,0000,0000,0000,0010
System.out.println(b1 >>> 2);
byte b2 = -10;//1111,0110
//-10 byte:1111,0110
//-10 int:1111,1111,1111,1111,1111,1111,1111,0110
//1073741821:0011,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2 >>> 2);
//注意:>> 和 >>> 如果是操作正數,效果是一樣的
8.運算式
5+6:算數運算式
5>6:關系運算式
5|6:位運算運算式
9.運算子的優先級
經驗:不用記,靈活運用小括號
優先級 運算子 結合性 1 () [] . 從左到右 2 ! +(正) -(負) ~ ++ – 從右到左 3 * / % 從左到右 4 +(加) -(減) 從左到右 5 << >> >>> 從左到右 6 < <= > >= instanceof 從左到右 7 == != 從左到右 8 &(按位與) 從左到右 9 ^ 從左到右 10 | 從左到右 11 && 從左到右 12 || 從左到右 13 ?: 從右到左 14 = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= 從右到左
10.轉義字符
含義:具有特殊意義的字符本身
\n:表示換行\" 表示一個雙引號
\’ 表示一個單引號
\\ 表示一個斜杠
\t 表示水平制表 :使輸出的陳述句對稱
System.out.print("今天不上課\n"); System.out.print("今天不上課\n"); System.out.println("小明說:\"今天不上課\""); System.out.println("小明說:\'今天不上課\'"); System.out.println("小明說:\\今天不上課\\"); System.out.println("3*3=9\t3*4=12\t3*5=15"); System.out.println("4*3=12\t4*4=16\t4*5=20");今天不上課 今天不上課 小明說:"今天不上課" 小明說:'今天不上課' 小明說:\今天不上課\ 3*3=9 3*4=12 3*5=15 4*3=12 4*4=16 4*5=20
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/289567.html
標籤:java
