容易忽略情況
運算符無論哪種語言都是不可或缺的一部分。
我們知道運算符包括+ 、-、*、/ 、%等等,運算順序遵循優先級策略原則。那麼我們在使用時,需要注意什麼呢?
首先,String 是有+=這個用法的,儘管它是String。
其次,整數除法會直接砍掉小數,而不是進位。
最後,%運算是針對正整數,雖然小數也能有結果。
書寫注意事項
書寫儘量簡單清晰明瞭。
比如,
int a = 5;
int b = a*-a;
這種寫法就不好,儘管機器能識別,但是不利於我們辨識,可以
int a = 5;
int b = a*(-a);
或者
int a = 5;
int b = -a*a;
自增自減
我們都知道變量增加1或者減少1,我們通常會這麼寫:
int aa = 1;
int bb = aa+1;
或者
cc = 3;
int dd = cc-1;
我們可以簡寫爲:
int aa = 1;
int bb = ++aa;
或者
int cc = 3;
int dd = --cc;
這++ 或– 就是自增自減,那麼自增自減的表示是什麼?
自增:
int i = 0;
i++;//表示先計算表達式值,然後i增加1
++i;//表示i先自增1,然後計算表達式值
以例爲證:
int x = 0;
int y1 = x++;//++在變量之後,先引用後增加
結果:y1= 0;
但是
int y2 = ++x;//++在變量前,先增加後使用
結果:y2 = 1;
==運算
下面來看一個例子,這個結果是多少呢?
public void ss(){
Integer i = new Integer(22);
Integer b = new Integer(22);
System.out.println(i == b);
System.out.println(i != b);
}
結果:
false
true
剛開始乍一看,覺得第一個是true,第二個是false,但是呢?
此時== 、!=比較的是對象的句柄而不是內容,所以我們看到的22是相同內容。那麼怎麼比較內容呢?對象而言,用equals.
public void ss(){
Integer i = new Integer(22);
Integer b = new Integer(22);
System.out.println(i.equals(b));
}
結果:true
對基本數據類型而言,比較的就是值。
public void ss(){
int i = 22;
int b = 22;
/*
* 或者
* int i = new Integer(22);
* int b = new Integer(22);
*/
System.out.println(i == b);
}
結果:
true
移位運算
比如,如下情況:
int x = Integer.MAX_VALUE<<1;
那麼,x值是多少呢?
出現了一種情況就是超越了int的最大值範圍
我們都知道 Integer.MAX_VALUE在計算機中的表示
01111111 11111111 11111111 11111111
共32位,最高位是符號位
左移1位就是
11111111 11111111 11111111 11111110
最高位變爲1
這是它的補碼形式,負數是以補碼形式存在,所以求其源碼
已知補碼求原碼 :補碼減去1,取反,符號位不變
所以補碼
10000000 00000000 00000000 00000010
結果就是-2
所以2*Integer.MAX_VALUE的值爲-2,取低32位值,並不是想的會報錯。