1.==:這個運算子對於基本資料型別(byte、short、int等)比較的是值,對於引用資料型別來說,比較的是位址。
說到了==,乙個與之對應的方法就不得不說一下,這個方法就是equals。想必大家都對它有所了解,它比較的就是兩個物件之間的值,那它的原理是什麼,我們來看看原始碼。
integer的equals
public boolean equals(object obj)
return false;
}
首先,equals比較的必須是物件。由原始碼可知,它先做的操作是判斷括號裡的型別是否是integer,是->比較值,相等返回true,不等返回false;否->返回false。
其實所有的包裝器類的equals都是這樣的。那麼如果不是包裝器類呢?
public boolean equals(object anobject)
if (anobject instanceof string)
return true;}}
return false;
}
這是string的equals方法。它先判斷的是兩個物件的位址是否相同,相同返回true。這很好解釋,位址相同了,指向的值肯定也相同。如果位址不同,進行下乙個判斷:判斷括號裡的物件是不是string型別的,如果是,且長度和括號外的string物件的長度相等,那麼就將兩個string物件中的每個字串進行比較,每個字串都一樣,返回true,否則返回false。
ok,那麼如果是普通的物件呢?像自定義的student等,他們的equals是怎樣的?
public boolean equals(object obj)
更簡單了,直接比較兩者位址是否一樣。這就是我們在使用set集合時,為什麼要重寫自定義類的equals方法和hashcode方法的原因了。hashcode方法可以按照我們的想法指定hashcode值為什麼,然後equals比較hashcode,就可以做到不重複的效果。
2.+:它可以做算數+,單純的+、-、*、/的+;也可以做字串拼接。所以我們通過例子來了解
system.out.println(1+2+"a"); //3a
system.out.println(1+2.0+"a");
system.out.println(1+"a"+2.0);
system.out.println(1+"a"+2); //1a2
system.out.println("a"+1+2); //a12
system.out.println('a'+1+2); //100 'a'的ascii碼是97
system.out.println('a'+"a"+1+2);//aa12 拼接的時候不會轉換成ascii碼
通過上例,我們可以知道的是:
當基本資料型別與基本資料型別+的時候,進行算數運算;當基本資料型別和string型別+的時候,進行字串拼接。
3.>>、<<、>>>:算數右移、算數座椅、邏輯左移
>>:通俗的來說就是不帶符號右移,相當於除以2
<<:不帶符號的左移,相當於乘2
>>>:帶符號右移,連同符號位一起移。
怎麼記》和》呢?我是這麼記的:>>只有兩個">",而》有三個">",所以》牛x一點,它可以連符號位一起移動。
system.out.println(10 >> 1); //5
system.out.println(-10 >> 1); //-5
system.out.println(10 << 1); //20
system.out.println(-10 << 1); //-20
system.out.println(10 >>> 1); //5
system.out.println(-10 >>> 1); //2147483643
我們就著重講一下最後乙個吧。首先-10預設是int型別的所以二進位制是1000 0000 0000 0000 0000 0000 0000 1010。往右帶著符號移一位,就是0100 0000 0000 0000 0000 0000 0000 1010。所以才會的到那個那麼大的數字
4.&、|、~、^、&&、||:
&:與 1&1=1,1&0=0,0&0=0,true&true=true,true&false=false,false&false=false
| :或 1|1=1,1|0=1,0|0=0,true|true=true,true|false=true,false|false=false
~:非 ~1=0,~0=1
^:異或 1^1=0,1^0=1,0^0=1
&&:若左邊的表示式為false,右邊的**不會執行
|| :若左邊的表示式為true,右邊的**不會執行
1for(初始化部分;迴圈條件;迭代部分)
執行順序:初始化部分(只執行一次) -> 迴圈條件 -> 迴圈體 -> 迭代部分 -> 迴圈條件 -> 迴圈體 -> 迭代部分 ........
2.while(迴圈條件)
執行順序:迴圈條件 -> 迴圈體,包括迭代部分 -> 迴圈條件.........
3.dowhile(迴圈條件);
執行順序:迴圈體,包括迭代部分 -> 迴圈條件.........
以上三種可以用continue和break對迴圈進行操作。
break:打破迴圈,即結束整個迴圈,執行迴圈之後的**
還可以加標記,指定結束什麼迴圈,舉個栗子:
public class xunhuan
system.out.println(j);
}system.out.println("---------");}}
}
a是指定的標記,隨便叫什麼名字。猜猜如上**的結果是什麼?每當 j等於2的時候,就結束本次迴圈,進入下一次,而我們在第一層迴圈左邊加了個標記,所以進入的下一次迴圈是第一層的迴圈。而且輸出的"----------"也不會列印。
switch語句:先說說語法吧。switch語句括號裡只允許出現char,byte,short,int,string,enum型別
switch([char,byte,short,int,string,enum])
public static void main(string args)
}
會輸出123default4。 第二天 運算子
加 減 乘 除 注意事項 一旦運算當中有不同型別的資料,那麼結果將會是資料範圍大的那種 對於乙個整數的表示式來說,除法用的是整除,整數除以整數,結果任然是整數。只看商,不看餘數 只有對於整數的除法來說,取模運算才有餘數的意義 例項 public class demo04operator 對於數值來說...
第二天 運算子 控制結構
第二天 運算子 控制結構 編寫程式,輸入4個整數找出最大值和最小值。enter four integers 10 8 49 35 largest 49 smallest 8 include define n 4 int main void mao pao for i 0 i n 1 i for i ...
第二天 第二章 運算子
一 算數運算子 算數運算子是處理四則運算的符號,在數字處理中應用的最多。運算子說明 例項結果 加 1 23 減 5 23 乘 2 36 除 7 23.5 求餘數 7 21 除法結果取整數 7 23 冪,返回x的y次方 2 4 16,即24 注 用 計算餘數,如果除數是負數,那麼結果也是負數。用 或 ...