?? operator.java
字號:
package book.basic;public class Operator { /** * 計算運算符: +; -; *; /; */ private void computeOperator() { int a = 8; int b = 5; // 對于除法運算,根據基本類型的自動轉換規則,當除數和被除數都是整數時,得到的結果也是整數。 // 因此 8/5得到的是1,而不是1.6 int f = a / b; double g = a / b; System.out.println("(f = a / b) = " + f + "; (g = a / b) = " + g); // 只要除數和被除數有一個為double或者float,結果就不同了,8/5.0得到是1.6 double h = a / (b * 1.0d); float i = a / (b * 1.0f); System.out.println("(h = a / (b * 1.0d)) = " + h + "; (i = a / (b * 1.0f)) = " + i); } /** * 比較運算符: ==; <; >; !=; <=; >=; */ private void compareOperator() { int a = 5; int b = 10; System.out.println("(a == b) = " + (a == b)); System.out.println("(a < b) = " + (a < b)); System.out.println("(a > b) = " + (a > b)); System.out.println("(a != b) = " + (a != b)); System.out.println("(a <= b) = " + (a <= b)); System.out.println("(a >= b) = " + (a >= b)); // 判斷兩個數字是否相等,要用"=="而不是"=",前者是比較運算符,后者是賦值符號 System.out.println("(a = b) = " + (a = b)); // 10 } /** * 位運算符: &; |; ^; ~; >>; >>>; <<; */ private void bitOperator() { byte a = 23; // "00010111" byte b = 26; // "00011010" // 按位與, 兩個運算數都為1時,結果為1,其余結果為0 int c = a & b; // "00010010" = 18 System.out.println("(c = a & b) = " + c); // 按位或,兩個運算數都為0時,結果為0,其余結果為1 int d = a | b; // "00011111" = 31 System.out.println("(d = a | b) = " + d); // 按位異或,兩個運算數相同時結果為0,不同時結果為1 int e = a ^ b; // "00001101" = 13 System.out.println("(e = a ^ b) = " + e); // 按位非,0變成1,1變成0 int f = ~a; // "11101000" = -24, // 注意,Java中采用補碼存儲數字,對于整數,原碼與補碼一致, // 對于負數,符號位不變,將原碼取反然后加1,得到補碼,補碼"11101000"對應的原碼是"10011000"即-24 System.out.println("(f = ~a) = " + f); // 右移,左邊空出位以符號位填充 int g = a >> 1;// "00001011" = 11 System.out.println("(g = a >> 1) = " + g); // 右移,左邊空出位以0填充 int h = a >>> 1;// "00001011" = 11 System.out.println("(h = a >>> 1)" + h); // 對負數操作時,>>和>>>得到結果會不一樣 System.out.println("(-24 >> 1) = " + (-24 >> 1) + "\t (-24 >>> 1) = " + (-24 >>> 1)); // 左移 int i = a << 1; // "00101110" = 46 System.out.println("(a << 1) = " + i); // 可以發現,右移1位相當于運算數除以2,左移1位相當于運算數乘以2, // 實質上,右移n位,相當于運算數除以2的n次方,左移n位,相當于運算數乘以2的n次方,讀者可以試驗。 // 在進行乘除法操作時,開發者要有意識的利用這個特點,以提高運算速度。 } /** * 布爾運算符: &&; ||; !; &; |; ^; */ private void booleanOperator() { boolean b1 = true; boolean b2 = true; boolean b3 = false; // &&運算符:對操作數進行與運算,當所有操作數都為true時,結果為true,否則結果為false。 if (b1 && b2 && b3) { System.out.println("變量b1, b2, b3的值都為true"); } else { System.out.println("變量b1, b2, b3中至少有一個的值為false"); } // 注意&&是短路與,意思是:當對操作數的表達式進行從左到右運算時,若遇到有操作數的值為false,則結束運算,將結果置為false。 int i = 2; int j = 0; if (b3 && ((j = i) == 2)) { } System.out.println("j = " + j); if (b1 && ((j = i) == 2)) { } System.out.println("j = " + j); // ||運算符:對操作數進行或運算,當所有操作數都為false時,結果為false,否則結果為true。 if (b1 || b2 || b3) { System.out.println("變量b1, b2, b3中至少有一個的值為true"); } else { System.out.println("變量b1, b2, b3的值都為false"); } // 同樣,||是短路或,意思是:當對操作數的表達式進行從左到右運算時,若遇到有操作數的值為true,就結束運算,將結果置為true。 if (b1 || ((j = j - 1) == 1)) { } System.out.println("j = " + j); if (b3 || ((j = j - 1) == 1)) { } System.out.println("j = " + j); // !運算符:對操作數的值進行取反運算,操作數為true,取反為false。 if (!b1) { System.out.println("變量b1 為 false,因為b1取反后的值為true"); } else { System.out.println("變量b1 為 true,因為b1取反后的值為false"); } // &運算符,和&&一樣,對操作數做與操作,不同的是它不是短路的,它會運算完所有的操作數表達式 if (b3 & ((j = i) == 2)) { System.out.println("b3 & ((j=i) == 2): true"); } else { System.out.println("b3 & ((j=i) == 2): false"); } System.out.println("j = " + j); if (b1 & ((j = j - 1) == 0)) { } System.out.println("j = " + j); // |運算符,和||一樣,對操作數進行或操作,但它不是短路的。 if (b1 | ((j = i) == 2)) { System.out.println("b1 | ((j=i) == 2): true"); } else { System.out.println("b1 | ((j=i) == 2): false"); } System.out.println("j = " + j); if (b3 | ((j = j - 1) == 1)) { } System.out.println("j = " + j); // ^運算符,對操作數做異或操作,相同為false,不同為true if (b1 ^ b2) { System.out.println("變量b1,b2的值不同!"); } else { System.out.println("變量b1,b2的值一樣!"); } // 注意:開發人員應該盡量使用短路與&&或者短路或||,而少用&和|操作符,因為,它們對整個條件表達式的計算的結果是一樣的。 // 使用&&和||可以減少運行時間。盡量不要在條件表達式中進行賦值等運算,可以將這類語句放到if之外。 // j = i; // if (b3 && (j==2)){ // } } /** * 賦值運算符: =; +=; -=; *=; /=; &=; |=; ^=; */ private void evaluateOperator() { // =是最常用的賦值運算符 int i = 5;// 將變量i的值賦為5 // +=運算符是先將運算符左邊的操作符的值加上右邊的操作數的值,將結果再賦值給運算符左邊的操作符 i += 3;// 等價于 i = i + 3; i -= 3;// 等價于i = i - 3; i *= 3;// 等價于i = i * 3; i /= 3;// 等價于i = i / 3; i &= 3;// 等價于i = i & 3 System.out.println("(i &= 3) = " + i); i |= 3;// 等價于i = i | 3 System.out.println("(i |= 3) = " + i); i ^= 3;// 等價于i = i ^ 3 System.out.println("(i ^= 3) = " + i); } /** * 其他運算符: 三元運算符; ++; --; -; * */ private void otherOperator() { int i = 5; // ++是將操作數加1 // ++i表示先將i加1后再進行運算 if (i++ == 5) { System.out.println("表達式(i++ == 5)的值為true"); } else { System.out.println("表達式(i++ == 5)的值為false"); } System.out.println("i = " + i); // i++表示先進行運算,再將i的值加1 i = 5; if (++i == 5) { System.out.println("表達式(++i == 5)的值為true"); } else { System.out.println("表達式(++i == 5)的值為false"); } System.out.println("i = " + i); // --將操作數減1,同樣,--i是先將i減1,再進行運算;i++是先進行運算,再將i減1 i--; --i; // 可以用三目運算符替代簡單的if語句 // 格式是: x = a ? b : c;如果a的值為true,則將b的值賦予x,否則將c的值賦予x。 int x = (i >= 0) ? i : -i; //將一個減號-和數字連用,是取數的負數 System.out.println("i的絕對值為: " + x); } public static void main(String[] args) { Operator test = new Operator(); System.out.println("計算運算符方法的輸出:"); test.computeOperator(); System.out.println("比較運算符方法的輸出:"); test.compareOperator(); System.out.println("位運算符方法的輸出:"); test.bitOperator(); System.out.println("布爾運算符方法的輸出:"); test.booleanOperator(); System.out.println("賦值運算符方法的輸出:"); test.evaluateOperator(); System.out.println("其他運算符方法的輸出:"); test.otherOperator(); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -