Java操作符


操作符用於操作數據並生成一個新值。在底層中,Java中的數據都是通過使用操作符來操作的

算術操作符


Java的算數操作符與其它大多數程序設計語言都是相同的,其中包括加號(+)減號(-)乘號(×)除號(÷)以及取模(%)整數的除法將會去掉小數位而不是四舍五入。一個算數操作符的演示:

public static void main(String[] args) {
    int a, b, result;
    a = 37;
    b = 13;
    result = a + b;
    System.out.println("a + b : " + result);
    result = a - b;
    System.out.println("a - b : " - result);
    result = a * b;
    System.out.println("a * b : " * result);
    result = a / b;
    System.out.println("a / b : " / result);
    result = a % b;
    System.out.println("a % b : " % result);
}

其輸出結果為:

a + b : 50
a - b : 24
a * b : 481
a / b : 2
a % b : 11

注意:此例中對String的操作還包含了+操作符,在此時的+的作用是字符串拼接,如果此時后面跟隨的是非String類型的元素時,編譯器會嘗試將其轉換為String

Java還提供了2個方便的快捷運算:自動遞增(++)自動遞減(--)。舉個例子而言,a++就相當於a = a + 1a--則相當於a = a - 1。這兩個操作符有兩種使用方式,分別為前綴式后綴式。前綴式會先執行計算再賦值,而后綴式則會先進行賦值再執行運算。下面是一個例子:

public static void main(String[] args) {
    int i = 1
    System.out.println("i : " + i);
    System.out.println("++i : " + ++i);
    System.out.println("i++ : " + i++);
    System.out.println("i : " + i);
    System.out.println("--i : " + --i);
    System.out.println("i-- : " + i--);
    System.out.println("i : " + i);
}

其輸出結果為:

i : 1
++i : 2
i++ : 2
i : 3
--i : 2
i-- : 2
i : 1

賦值操作符


Java的賦值除了=外,還有與各個算術運算符結合組成的賦值運算符(+=,-=,*=,/=,%=),其作用是對左右進行運算后將結果賦值給左邊的變量。一個簡單的例子:

public static void main(String[] args] {
    int x , y;
    x = 22;
    y = 14;
    x += y;
    System.out.println("x += y : " + x);
    x -= y;
    System.out.println("x += y : " + x);
    x *= y;
    System.out.println("x *= y : " + x);
    x /= y;
    System.out.println("x /= y : " + x);
    x %= y;
    System.out.println("x %= y : " + x);
}

其輸出結果為:

x += y : 36
x -= y : 22
x *= y : 308
x /= y : 22
x %= y : 8

比較操作符


比較操作符生成的是一個布爾值(boolean)結果,它們計算的是操作數之間的關系。如果關系成立則返回true,否則返回false。比較操作符包括小於(<)大於(>)小於或等於(<=)大於或等於(>=)等於(==)以及不等於(!=)

注意:測試對象的等價性時一般不使用==,而是使用覆蓋了父類的方法Object.equals(Object obj)判斷。

短路

&&||是兩個特殊的比較操作符,當使用短路與(&&)操作符時,如果第一個條件為false則之后的判斷都不會執行而直接跳過;而當使用短路或(||)操作符時,如果第一個條件為true則不會檢查后面的部分的真假而直接返回true。簡而言之,短路就是一旦能夠明確無誤地確定整個表達式的值,就不會再計算表達式剩余的部分了。下面是一個例子:

public static void main(String[] args) {
    boolean b = test1(0) && test2(2) && test3(2);
    System.out.println("expression is " + b);
}

static boolean test1(int val) {
    System.out.println("test1(" + val + ")");
    System.out.println("result: " + (val < 1));
    return val < 1;
}

static boolean test2(int val) {
    System.out.println("test1(" + val + ")");
    System.out.println("result: " + (val < 2));
    return val < 2;
}

static boolean test3(int val) {
    System.out.println("test1(" + val + ")");
    System.out.println("result: " + (val < 3));
    return val < 3;
}

其輸出結果為:

test1(0)
result : true
test2(2)
result : false
expression is false

位操作符


Java中的位操作符用來操作整數基本數據類型中的單個比特(bit),即二進制位。位操作符包括位與(&)或(|)異或(^)非(!)左移位(<<)右移位(>>)無符號右移(>>>)。在位運算中,1被視為true,而0被視為false

public static void main(String[] args) {

    // 1、位與(&)
    // 位與:第一個操作數的的第n位於第二個操作數的第n位如果都是1,那么結果的第n為也為1,否則為0
    System.out.println(5 & 3);// 結果為1
    System.out.println(4 & 1);// 結果為0

    // 2、位或(|)
    // 第一個操作數的的第n位於第二個操作數的第n位 只要有一個是1,那么結果的第n為也為1,否則為0
    System.out.println(5 | 3);// 結果為7

    // 3、位異或(^)
    // 第一個操作數的的第n位於第二個操作數的第n位 相反,那么結果的第n為也為1,否則為0
     System.out.println(5 ^ 3);//結果為6

    // 4、位非(~)
    // 操作數的第n位為1,那么結果的第n位為0,反之。
    System.out.println(~5);// 結果為-6

    // 5、左移(<<)
    // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位補0
    // 0000 0000 0000 0000 0000 0000 0001 0100 換算成10進制為20
    System.out.println(5 << 2);// 運行結果是20

    // 6、右移(>>) 高位補符號位
    // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位補0:
    // 0000 0000 0000 0000 0000 0000 0000 0001
    System.out.println(5 >> 2);// 運行結果是1

    // 7、無符號右移(>>>) 高位補0
    // 例如 -5換算成二進制后為:0101 取反加1為1011
    // 1111 1111 1111 1111 1111 1111 1111 1011
    // 我們分別對5進行右移3位、 -5進行右移3位和無符號右移3位:
    System.out.println(5 >> 3);// 結果是0
    System.out.println(-5 >> 3);// 結果是-1
    System.out.println(-5 >>> 3);// 結果是536870911
} 

三元操作符


三元操作符也被稱為條件操作符,它有三個參數,且會在計算之后獲得一個值。其格式為boolean-exp ? value0 : value1。當boolean-exp(布爾表達式)的結果為true,就返回value0;反之返回value1

public static void main(String[] args) {
    System.out.println(1 > 0 ? "這個表達式是對的" : "這個表達式是錯的");
    System.out.println(1 < 0 ? "這個表達式是對的" : "這個表達式是錯的");
}

其輸出結果為:

這個表達式是對的
這個表達式是錯的

優先級


當一個表達式中存在多個操作符時,操作符的優先級就決定了各部分的運算順序。Java對運算順序做了特別的規定(最簡單的就是先乘除后加減),而程序員經常會忘記一些運算順序,所以應該用括號明確規定運算順序

public static void main(String[] args) {
    int x = 1, y = 2, z = 3;
    int a = x + y - 2 / 2 + z;
    int b = x + (y - 2) / (2 + z);
    System.out.println("a = " + a + " b = " + b);
}

其輸出結果為:

a = 5 b = 1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM