一、運算符
運算符包括下面幾種:
算術運算符賦值運算符比較運算符邏輯運算符位運算符三目運算符
最不常用的是位運算符,但也是最接近計算機底層的。
1、算術運算符
(1)+的幾種用法:加法、正數、字符串連接符
(2)除法的時候要注意一個問題:整數相除,只能得到整數。要想得到小數,可以將數據自身*1.0,即將數據自身先轉換為浮點型。
2、賦值運算符
符號 = += -= *= /= %=
注:=為基本的賦值運算符,其他的為擴展的賦值運算符
面試題:
(1)short s=1, s = s+1;
(2) short s=1, s+=1;
上面兩個代碼有沒有問題,如果有,哪里有問題?
答案:代碼(1)是有錯誤的,會損失精度,byte,short在定義的時候,他們接收的其實是一個int類型的值。這個是自己做了一個數據檢測的,如果不再它們的范圍內,就報錯。效果如下:
代碼(2)沒有錯誤,因為:擴展的賦值運算符其實隱含了一個強制類型轉換。
也就是說,i += 1; 不是等價于 i = i + 1; 而是等價于 i = (i的數據類型)(s + 1);
3、關系運算符
注1:比較運算符的結果都是boolean型,也就是要么是true,要么是false。
注2:比較運算符“==”不能誤寫成“=” 。舉例:
4、邏輯運算符
(1)邏輯運算符用于連接布爾型表達式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。
(2)“&”和“&&”的區別?同理, “|”和“||”的區別?
A:最終結果都一樣。例如:A和B必須同時為真,A&B、A&&B的結果才為真。B:&&具有短路效果,左邊是false,右邊不執行。||具有短路效果,左邊是true,右邊不執行。
注:開發中常用的邏輯運算符: &&,||,!
(3)異或( ^ )與或( | )的不同之處是:當左右都為true時,異或的結果為false。
5、位運算符:
雖然開發中用的不多,但會在很多源碼中看到,因為計算機底層的計算都是位運算。
面試題1:實現兩個整數變量的交換
代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/* 面試題:請自己實現兩個整數變量的交換 */ class OperatorTest { public static void main(String[] args) { int a = 10 ; int b = 20 ; System.out.println( "a:" +a+ ",b:" +b); //方式1:使用第三方變量(開發中用的) int c = a; a = b; b = c; System.out.println( "a:" +a+ ",b:" +b); System.out.println( "------------" ); //方式2:用位異或實現(面試用) //左邊:a,b,a //右邊:a ^ b a = a ^ b; b = a ^ b; //a ^ b ^ b = a a = a ^ b; //a ^ b ^ a = b System.out.println( "a:" +a+ ",b:" +b); //方式3:用變量相加的做法 a = a + b; //a=30 b = a - b; //b=10 a = a - b; //a=20 System.out.println( "a:" +a+ ",b:" +b); * //方式4:一句話搞定 b = (a+b) - (a=b); //b=30-20=10,a=20 System.out.println( "a:" +a+ ",b:" +b); } } |
面試題2:請用最有效率的方式寫出計算2乘以8的結果。
答案:2 * 8等價于2 << 3
知識回顧:
<<:左移 左邊最高位丟棄,右邊補齊0 >>:右移 最高位是0,左邊補齊0;最高為是1,左邊補齊1 >>>:無符號右移 無論最高位是0還是1,左邊補齊0
6、三目運算符:
格式:(關系表達式)?表達式1:表達式2;
如果條件為true,運算后的結果是表達式1;
如果條件為false,運算后的結果是表達式2;
示例:
獲取兩個數中大數:
獲取三個整數中的最大值:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//方式一:分兩步 //A:先比較a,b的最大值 //B:拿a,b的最大值在和c進行比較 int temp = ((a > b)? a: b); //System.out.println(temp); int max1 = (temp > c? temp: c); System.out.println( "max1:" +max1); //方式二:一步搞定 int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c); //這種做法不推薦: //int max2 = a > b?a > c? a: c:b > c? b: c; //System.out.println("max2:"+max2); |
建議用方式一 。另外,方式二中,第10行和第12行是一樣的,是三目運算符的嵌套使用。
比較兩個整數是否相等:
1
2
3
4
5
6
7
|
//比較兩個整數是否相等 int m = 100 ; int n = 200 ; //boolean flag = (m == n)? true: false; boolean flag = (m == n); System.out.println(flag); |
二 、鍵盤錄入數據
我們目前在寫程序的時候,數據值都是固定的,但是實際開發中,數據值肯定是變化的,所以,我準備把數據改進為鍵盤錄入,提高程序的靈活性。
如何實現鍵盤錄入數據呢?(目前先記住使用)
(1)導包(位置放到class定義的上面):import java.util.Scanner;
(2)創建鍵盤錄入對象:Scanner sc = new Scanner(System.in);
(3)通過對象獲取數據:int x = sc.nextInt();
代碼舉例:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文地址:https://www.cnblogs.com/qianguyihao/p/4143725.html