天天看點

小闫陪你入門 Java (三)7.Java 運算符

"

First say to yourself what you would be; and then do what you have to do.

—— Epictetus

首先,對自己說想要成為什麼樣的人;然後做一切必須做的。

"

7.Java 運算符

7.1算術運算符

加減乘除與 Python 中一緻,分别為

+-*/

。取餘為

%

。不同的有以下兩種,分别為自增和自減。

自增為

++

,自減為

--

。即一個數字加1或者減1。

public class HelloDemo {
    public static void main(String[] args) {
        // 運算符
        int i1 = 10;
        int i2 = 22;
        int i3 = 25;
        int i4 = 66;
        System.out.println("i1 + i2 = " + (i1 + i2));
        System.out.println("i3 - i2 = " + (i3 - i2));
        System.out.println("i4 * i1 = " + (i4 - i1));
        System.out.println("i2 / i1 = " + (i2 / i1));

        // 自增自減
        ++i1;
        System.out.println(i1);
        --i1;
        System.out.println(i1);
    }
}           

複制

詳解自增/自減:

int b = ++a;           

複制

上述過程其實為兩步,第一步為加 1 後重新指派,第二步為将新值 a 指派給 b。
int b = a++           

複制

此過程與之前不同,它是先将 a 指派給 b,然後 a 自增操作。

自減同理

7.2 關系運算符

關系運算符即比較兩個數值之間的關系,如大小等。與 Python 中相同的為

==

表示相等;

!=

表示不相等;

>

表示大于;

<

表示小于;

>=

表示大于等于;

<=

表示小于等于。

public class HelloDemo {
    public static void main(String[] args) {
        int s = 10;
        int n = 20;
        System.out.println("s == n = " + (s == n) );
        System.out.println("s != n = " + (s != n) );
        System.out.println("s > n = " + (s > n) );
        System.out.println("s < n = " + (s < n) );
        System.out.println("n >= s = " + (n >= s) );
        System.out.println("n <= s = " + (n <= s) );
    }
}           

複制

7.3 位運算符

位運算符即将十進制等數字轉換為二進制數字後,對每一個位置上字元進行操作。如下示例,大家可以了解一下:

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011           

複制

操作符 描述
如果相對應位都是1,則結果為1,否則為0
| 如果相對應位都是 0,則結果為 0,否則為 1
^ 如果相對應位值相同,則結果為0,否則為1
按位取反運算符翻轉操作數的每一位,即0變成1,1變成0。
<< 按位左移運算符。左操作數按位左移右操作數指定的位數。
>> 按位右移運算符。左操作數按位右移右操作數指定的位數。
>>> 按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充。

7.4 邏輯運算符

邏輯運算符即與或非關系。與 Python 不同,

&&

表示與關系;

||

表示或關系;

!

表示非關系。

7.5 指派運算符

下面列出 Java 中的指派運算符:

操作符 描述
= 簡單的指派運算符,将右操作數的值賦給左側操作數
+ = 加和指派操作符,它把左操作數和右操作數相加指派給左操作數
- = 減和指派操作符,它把左操作數和右操作數相減指派給左操作數
* = 乘和指派操作符,它把左操作數和右操作數相乘指派給左操作數
/ = 除和指派操作符,它把左操作數和右操作數相除指派給左操作數
(%)= 取模和指派操作符,它把左操作數和右操作數取模後指派給左操作數
<< = 左移位指派運算符
>> = 右移位指派運算符
&= 按位與指派運算符
^ = 按位異或指派操作符
| = 按位或指派操作符

7.6 三元運算符

Java 中三元運算符與 Python 中大不一樣,其表示為:

類型 變量 = 表達式 ? 如果條件為真時的操作 : 條件為假時的操作           

複制

關鍵在于符号

?:

7.7 instanceof 運算符

它是用來判斷某個變量是否為某類型或者某個對象是否為某類或者接口的一個對象。如果是為真。例如:

String name = "Ethan";
boolean result = name instanceof String;

class Vehicle {}
public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}           

複制

7.8 運算符優先級

運算符優先級是如果代碼中包含多種運算符,那麼優先執行誰的問題。其如數學,有括号先括号(小括号優先于中括号),乘除優先于加減等等。

下面附網上一個表格,具有最高優先級的運算符在表的最上面,最低優先級的在表的底部,以供大家忘記時進行檢視:

類别 操作符 關聯性
字尾 () [] . (點操作符) 左到右
一進制 + + - !〜 從右到左
乘性 * /% 左到右
加性 + - 左到右
移位 >> >>> << 左到右
關系 >> = << = 左到右
相等 == != 左到右
按位與 左到右
按位異或 ^ 左到右
按位或 | 左到右
邏輯與 && 左到右
邏輯或 | | 左到右
條件 ?: 從右到左
指派 = + = - = * = / =%= >> = << =&= ^ = | = 從右到左
逗号 左到右

8.循環

循環即将相同的邏輯多次執行。與 Python 相同,它也有 while 循環和 for 循環,但是其比 Python 多了一種

do...while

循環。下面即詳細看看。

8.1 while 循環

先來看其基本文法,即布爾表達式為 True 時循環一直執行。

while( 布爾表達式 ) {
    // 循環執行邏輯
}           

複制

示例如下:

public class Test {
    public static void main(String args[]) {
        // while 循環
        int int1 = 10;
        while (int1 > 0) {
            System.out.println(int1);
            int1--;
        }
    }
}           

複制

8.2 for 循環

for 循環如同 Python 中的 for 循環一樣,生來就是簡化代碼操作的。

for(初始化; 布爾表達式; 更新) {
    // 代碼語句
}           

複制

大家看到上述文法也許有些懵逼,我們類比 Python 中的 for 循環進行解讀。Python 中:

for i in range(3):
    print(i)           

複制

要想達到同樣的效果,Java 中代碼如下:

public class Test{
    public static void main(String args[]) {
        // for 循環
        for (int x = 0; x < 3; x = x + 1){
            System.out.println(x);
        }
    }
}           

複制

即在 for 後的括号中,先填寫一個控制循環的變量,再填寫一個判斷條件,最後更新變量值已達到控制循環的目的。

從上述代碼可以看出 Java 确實代碼量比 Python 多一點。

增強 for 循環:

大家想起 Python 中有如下操作:

namelist = ['Ethan', 'yan', 'liang']
for name in list:
    print(name, end=",")           

複制

可以循環周遊姓名清單并且列印輸出,那麼 Java 中呢?Java 從 Java5 的時候引入了一種方式,稱為增強操作,寫為如下:

public class Test {
    public static void main(String args[]){
        // 增強for循環
        String [] namelist = {"Ethan", "yan", "liang"};
        for (String name: namelist) {
            System.out.print(name);
            System.out.print(",");
        }
    }
}           

複制

注意:其中清單并不是中括号,而是大括号。

print()

函數列印輸出後不會執行換行操作。

8.3 do... while 循環

此循環與 while 循環類似,不同點在于

do...while

循環至少執行一次。(如判斷條件不滿足,while 循環不會執行,但是 do...while 循環會執行一次)先來看起文法:

do {
    // 代碼語句
}while( 布爾表達式 )           

複制

其實從代碼中即可分析出原因,因為代碼塊先執行,條件表達式後執行。

public class Test {
    public static void main(String args[]) {
        int a = 10;
        do {
            System.out.println(a);
            a--;
        }while (a<0);
    }
}           

複制

上例中 while 的判斷條件不滿足,如果是 while 循環的話則不會執行;而上述例子大家可以進行驗證,會傳回 10。

8.4 終止循環

與 Python 中相同,Java 中也有兩個關鍵字用來終止循環,一個為 break,一個為 continue。

break:終止目前循環。

continue:終止本次循環。(比如循環輸出1到10,在7的時候遇到了語句 continue,那麼7不會輸出,而8、9等正常輸出)

9.條件語句

9.1 if

我們來看一下最簡單的 if 語句如何書寫:

if( 布爾表達式 ) {
    // 布爾表達式為true時執行的語句
}           

複制

示例如下:

public class Test{
    public static void main(String args[]){
        // if
        int i = 1;
        if(i==1){
            System.out.println("值為1");
        }
    }
}           

複制

Java 中字元串用雙引号包裹。

9.2 if...else

文法為:

if(布爾表達式){
   //如果布爾表達式的值為true
}else{
   //如果布爾表達式的值為false
}           

複制

過于簡單,不再示例。

9.3 if...else if...else

此為多條件判斷情況,文法如下:

if(布爾表達式 1){
   //如果布爾表達式 1的值為true執行代碼
}else if(布爾表達式 2){
   //如果布爾表達式 2的值為true執行代碼
}else if(布爾表達式 3){
   //如果布爾表達式 3的值為true執行代碼
}else {
   //如果以上布爾表達式都不為true執行代碼
}           

複制

類比于 Python 中的文法:

if 條件1:
    條件為真時執行
elif 條件2:
    條件為真時執行
else:
    條件都不滿足時執行           

複制

其實

elif

就是

elseif

的縮寫。

當然,Java 中的條件語句也支援嵌套操作。