第三天學習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{
public static void main(String[] args){
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章