上篇說到Java中的變量與常量,接下來就是簡單的計算了,首先需要了解一下Java中的運算符。
六、運算符
1. 賦值運算符
賦值運算符即“=”,是一個二元運算符(即對兩個操作數進行處理),其功能是將右方操作數所含的值賦值給左方的操作符。其中左方必須是一個變量,而右邊所賦的值可以使任何數值或表達式,例子如下:
int a = 10; // 將10賦給a int b = 5; // 將5賦給b int c = a+b; // 將變量a和b進行運算后的結果賦給c
也可先定義變量再進行賦值運算,如:
int a, b, c; // 聲明int型變量a、b、c a = 10; // 將10賦值給變量a c = b = a + 5; // 將a+5賦值給變量b、c
在Java中可以把賦值運算連在一起使用,比如上方b、c的運算結果都為15。
2. 算數運算符
Java中的算數運算符主要有+、-、*、/和%,分別為加、減、乘、除和求余,都是二元運算符。注意除法運算時,0不能作為除數。
1 public class Arith { 2 3 public static void main(String[] args) { 4 float num1 = 52.56f; // 聲明float型變量並賦值 5 int num2 = 512; // 聲明int型變量並賦值 6 7 System.out.println("num1 + num2 = " + (num1 + num2)); // 將變量相加並輸出 8 System.out.println("num2 - num1 = " + (num2 - num1)); // 將變量相減並輸出 9 System.out.println("num1 * num2 = " + num1 * num2); // 將變量相乘並輸出 10 System.out.println("num1 / num2 = " + num1 / num2); // 將變量相除並輸出 11 } 12 }
運行結果如下:
3. 自增和自減運算符
自增、自減運算符是單目運算符(只有一個操作數),可以放在操作數之前,也可以放在操作數之后。操作數必須是一個整型或浮點型變量。自增自減的作用是將變量的值加一或減一,放在操作數前后的作用不同,考試中最常出現的考題之一,需加以區分。
若自增(自減)運算符在操作數之前,如++a(--a)表示先使a的值加一(減一),再使用變量;若自增(自減)運算符在操作數之后,如--a(--a)表示先使用變量a,再對其進行加一(減一)操作,下面看一個例子:
1 public class Example { 2 3 public static void main(String[] args) { 4 int a; // 聲明變量a 5 6 a = 4; // 賦值為4 7 System.out.println("++a后的值為:" + ++a); // 輸出++a的值 8 9 a = 4; // 同樣賦值為4(重新賦值,放止a的值已經發生改變) 10 System.out.println("a++后的值為:" + a++); // 輸出a++的值 11 } 12 13 }
不妨先猜測一下結果是什么,運行結果如下:
為什么會出現兩個不同的答案呢?a的值為4,++a相當於先對a進行自增再輸出,也就是執行輸出時,a的值已經變為5了;而a++相當於先輸出a的值再自增,也就是先輸出a的值為4,然后再對a進行自增,此時a為5,但4已經輸出了,所以會出現這兩個結果。
4. 比較運算符
比較運算符屬於二元運算符,用於變量與變量之間、變量與常量之間及其它類型的信息之間的比較,運算結果是boolean型,當運算符對應關系成立時,運算結果為true,否則結果為false。
常見比較運算符有>(比較左是否大於右)、<(比較左是否小於右)、>=(比較左是否大於等於右)、<=(比較左是否小於等於右)、==(比較左是否等於右)、!=(比較左是否不等於右)。這里要特別注意,“=”是賦值運算符,“==”才是比較運算符。
1 public class Compare { 2 3 public static void main(String[] args) { 4 int num1 = 4; 5 int num2 = 5; 6 7 System.out.println("4<5: " + (num1 < num2)); // 判斷4小於5是否成立 8 System.out.println("4>5: " + (num1 > num2)); // 判斷4大於5是否成立 9 System.out.println("4==5: " + (num1 == num2)); // 判斷4等於5是否成立 10 System.out.println("4!=5: " + (num1 != num2)); // 判斷4不等於5是否成立 11 System.out.println("4>=5: " + (num1 >= num2)); // 判斷4大於等於5是否成立 12 System.out.println("4<=5: " + (num1 <= num2)); // 判斷4小於等於5是否成立 13 } 14 15 }
上述程序的運行結果如下:
5. 邏輯運算符
邏輯運算符包括&&(&)(邏輯與)、||(|)(邏輯或)和!(邏輯非),返回值為布爾類型,操作元也必須是布爾類型數據。其中除了“!”是一元運算符外,其余的都是二元運算符。邏輯與是左右兩個表達式都為true,邏輯結果才為true;邏輯或是左右兩個表達式有一個或兩個表達式為true時,邏輯結果才為true。
這里就有個小知識點了,&&(||)和&(|)有什么區別呢?
以“&&”和“&”為例,這兩個符號都是邏輯與,當左右兩個表達式都為true時,邏輯結果才為true。使用“&”時,左右兩邊都會判斷;而使用“&&”時,如果“&&”左邊的表達式結果為false,那么計算機就不會再判斷右邊的結果了,直接返回邏輯結果為false,這就是它們的區別。“||”則是左邊判斷為true時,就不會再判斷右邊,而“|”兩邊都會判斷。使用“&&”和“||”可以節省計算機判斷的次數,提高效率,通常被稱為“短路”,而“&”和“|”被稱為“非短路”。
6. 位運算符
位運算符用於處理整型和字符型的操作數,對其內存進行操作,數據在內存中以二進制形式表示(這里二進制的表示不做過多說明,相信學計算機的朋友們都非常了解二進制存儲及數據表示)。主要有~(按位取反)、&(按位與)、|(按位或)、^(安慰異或)、<<(左移)、>>(右移)、>>>(無符號右移)。
至於運算方法這里就不多贅述了,Java語言可以利用這幾個位運算符幫我們進行復雜的二進制運算,得到我們想要的結果,如 48<<1 就是將48的二進制數向左移1位,結果為96。移位可實現整數除以或乘以2的n次方的效果,例如 y<<2 與y*4的結果相同,4就是2的二次方, y>>1 與y/2的結果相同,2為2的一次方。所以總結起來就是——左乘右除。
7. 三元運算符
三元運算符是Java中唯一一個三目運算符,操作數有三個,如 boolean b = 50 < 30 ? true : false; ,解釋一下這句代碼,首先定義一個布爾型變量b,=右邊是一個三元運算符,先判斷50是否小於30,如果成立,則結果為“:”左邊的值(true),如果不成立,結果為“:”右邊的值(false),然后將得出的值賦給=左邊的b。再比如下面這個例子:
int i = 21; int j = 47; int z = i<j ? 100 : 200;
這里首先判斷i<j是否成立,如果成立,z的值就是100,如果不成立,z的值就是200,因為21<47成立,所以z=100。
8. 運算符優先級
Java中表達式就是使用運算符連接起來的符合Java規則的式子,運算符的優先級決定了表達式中運算執行的先后順序。下面是一張運算符優先級的表:
優先級 | 運算符 |
1 | ( ) |
2 | +、- |
3 | ++、--、! |
4 | *、/、% |
5 | +、- |
6 | >>、>>>、<< |
7 | <、>、>=、<= |
8 | ==、!= |
9 | & |
10 | ^ |
11 | | |
12 | && |
13 | || |
14 | ? : |
15 | = |
如果兩個運算符有相同的優先級,那么左邊的表達式要比右邊的先處理。
七、類型轉換
1. 自動類型轉換
Java中的8中基本類型可以混合使用,那必然會出現一個類型轉換的問題,不同類型的數據在運算過程中首先會自動轉換為同一類型再進行運算。自動類型轉換遵循低級到高級轉換的規則(占用空間越小級別越低)。
例如:
float num1 = 45f; int num2 = 120; System.out.println(num1 + num2);
這里系統首先將int型變量轉換成float型變量之后再相加,所以輸出為float型,結果是165.0。隱式轉換規則見下表:
操作數1的數據類型 | 操作數2的數據類型 | 轉換后的數據類型 |
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
2. 強制類型轉換
當把高精度的變量的值賦給低精度的變量時,必須使用顯式類型轉換運算(又稱強制類型轉換),如把double、float型轉換成int、long型如下:
int a = (int)42.56; // 此時a輸出為42 long b = (long)467.5f // 此時b輸出為467
但要注意的是,不可超出變量的取值范圍,否則會數據溢出,如下方代碼,由於byte型變量最大值為127,而427已經超出其取值范圍,因此會發生數據溢出,造成了數據的丟失。boolean型不能轉換。
short s = 427; byte b = (byte)s;
以上就是Java語言基礎的所有內容,下一篇將介紹Java中的流程控制。