天天看點

第三天學習Java:運算符運算符是一種特殊的符号,用以表示資料的運算、指派和比較等。算法運算符指派運算符比較運算符(關系運算符)邏輯運算符位運算符(用的很少,二進制)三元運算符

一、運算符

運算符是一種特殊的符号,用以表示資料的運算、指派和比較等。

算法運算符

正号、負号、加減乘除、取模(取餘)

++自增(前),先運算後取值。

++自增(後),先取值後運算。

--自減(前),先運算後取值。

--自減(後),先取值後運算。

  • ,字元串連接配接。

    %取模(取餘),餘數符号跟被除數相同。

小程式:

class Test{

        public static void main(String[] args){

                int i1 = 12;

                int i2 = 5;

                double d1;

                double d2;

                d1=i1 / i2;

                d2=i1 / (i2+0.0);

                System.out.println(d1);

                System.out.println(d2);

System.out.println("i1 % i2=" + i1 % i2);

int i3 = 10;

int t1 = ++i3;

System.out.println("i3 = " + i3 + ",t1 = " +t1);

int i4 = 10;

int t2 = i4 ++;

System.out.println("i4 = " + i4 + ",t2 = " + t2);

int i5 = 187;

System.out.println("百位數是" + i5 / 100);

System.out.println("十位數是" + i5 % 100 / 10);

System.out.println("個位數是" + i5 % 10);

}

$ javac Test.java

$ java Test

2.0

2.4

i1 % i2=2

i3 = 11,t1 = 11

i4 = 11,t2 = 10

百位數是1

十位數是8

個位數是7

指派運算符

符号:=

當“=”兩側資料類型不一緻時,可以使用自動類型轉換或使用強制類型轉換原則進行處理。

支援連續指派

擴充指派運算符:+=,-+,*=,/=,%=

通常寫法:

i2=j2=10;

i3=10,j3=20;

int num1=10;

num1+=2; //12

int num2 = 12;

num2 % =5;//2

short s1=10;

s1 + = 2;//不會改變變量本身資料類型

s1 = s1 + 2;//報錯

比較運算符(關系運算符)

運算符 運算 範例 結果

== 相等于 4==3 false

!= 不等于 4!=3 true

< 小于 4<3 false

Ø 大于 4>3 true

<= 小于等于 4<=3 false

= 大于等于 4>=3 true

instanceof 檢查是否是類的對象 “Hello” instaceof String true

比較運算符的結果都是boolean型,要麼是true,要麼是false

比較運算符“==”不能誤寫成“=”

邏輯運算符

& 邏輯與 | 邏輯或 ! 邏輯非

&& 短路與 || 短路或 ^ 邏輯異或

123

a b a&b a&&b a|b a||b !a a^b

true ture true true true true false false

true false fasle fasle true true false true

fasle true false false true true true true

fasle false false false fasle false true false

&與&&區分

相同點:運算結果相同;當符号左邊是true時,二者都會執行右邊的運算。

不同點:當符号左邊是false時,&繼續執行符号右邊的運算,&&不再執行右邊的運算。

同理|與||,當符号左邊為true時,|繼續執行右邊的運算,||不再執行右邊的運算。

開發中推薦使用||

例子

class Luoji{

public static void main(String[] args){

boolean b1 = false;

int i1 = 10;

if(b1 & (i1++ > 0)){

System.out.println("我現在在南京");

} else{

System.out.println("我現在在北京");

}

System.out.println(i1);

boolean b2 = false;

int i2 = 10;

if(b2 && (i2++ >0)){

                System.out.println("我現在在南京");

}               else{

                System.out.println("我現在在北京");

System.out.println(i2);

$ javac Luoji.java 

$ java Luoji

我現在在北京

11

10

位運算符(用的很少,二進制)

操作的都是整型變量,在一定範圍内每左移一位相當于*2,右移相當于/2

面試題:最高效方式計算2*8? 2<<3或8<<1

運算符 運算 範例

<< 左移(2) 3<<2=12 32*2=12

右移(/2) 3>>1=1 3/2=1
無符号右移 3>>>1=1 3/2=1

& 與運算符 6&3=2,轉換2進制,01計算

| 或運算符 6|3=7,同上

^ 異或運算 6^3=5,同上

~ 取反運算 ~6=-7,包括符号位全部取反

三元運算符

格式:條件表達式?表達式1:表達式2

條件表達式為true,運算結果是表達式1;false為表達式2

表達式1和2為同種類型。

三元運算符可以嵌套使用

三元運算符與if-else的聯系和差別

1、三元運算符可以簡化if-else語句

2、三元運算符要求必須傳回一個結果

3、if後的代碼塊可以有多個語句。

條件表達式為boolean類型,根據條件表達式決定執行1或者2.

例子,3個數取最大值:

$ vim SanYuan.java

class SanYuan{

int n1=12;

int n2=30;

int n3=-43;

int max=((n1>n2?n1:n2)>n3)?(n1>n2?n1:n2):n3;

System.out.println("The max of n1 n2 n3 is " + max);

$ javac SanYuan.java 

$ java SanYuan

The max of n1 n2 n3 is 30