《Java編程思想》第四版讀書筆記 第三章

3.1dom

本節做者爲了簡化System.out.println操做,引入了本身寫的一個Print類,裏面的靜態方法print()內部就是調用了System.out.println()。函數

在使用Print類時運用了靜態import。這個1.5添加的新特性,它import具體的類,這樣在代碼中可使用該類的靜態方法,也能夠import類的靜態方法,導入單一的靜態方法。例如要使用com.test.Print類的靜態方法能夠:spa

import static com.test.Print.*;.net

注意必定要帶*,表明靜態導入Print類下的全部靜態方法,這樣在代碼中能夠直接使用方法名調用方法而不用加類名,要導入一個靜態方法就把*替換成方法名便可。對象

 

3.5字符串

整數之間除法的結果會直接去掉小數位而不是四捨五入的結果。get

 

本小節的示例程序中使用了Random類的對象,若是構造函數無參數,則會使用當前時間做爲隨機數生成器的種子。若是在構造函數的參數中指定固定的種子,那麼產生的隨機數序列老是相同的。編譯器


一元加號的存在是爲了與一元減號相對應,它惟一的做用是將較小類型的操做數提高爲int。it

 

3.6編譯

自增運算符和自減運算符分爲前綴式和後綴式兩種,前綴式是++或--在變量或表達式前。前綴式是先執行運算再生成值,然後綴式則先生成值再執行運算。

 

3.8

與、或、非操做只可應用於布爾值,與C++不一樣,C++認爲非零爲true,而Java只能使用布爾類型。

 

短路:一旦可以明確無誤的肯定整個表達式的值,就再也不計算表達式的餘下部分了。

 

3.9

C、C++或者Java中,二進制數沒有直接常量表示方法。Java中,使用Integer和Long類的靜態方法toBinaryString()能夠輸出二進制表示的字符串。

若是給變量賦值,字面常量超出了變量的範圍,編譯器會報錯。

 

用小數字面常量給float賦值,編譯器一般會將其做爲雙精度處理,因此若是沒有尾隨f,會報錯。

 

Java的指數字面常量中e或者E表明10的冪次。

 

3.10

按位與、按位或、按位異或也能夠用於布爾類型,可是判斷表達式時不能短路,按位非不能夠用於布爾類型。

 

練習10中要求構造兩個int,有交替的二進制位1和0,一個以1結尾一個以0結尾。提示中寫到用十六進制是最簡單的表示方法,由於十六進制一個數正好表明四個位。

 

3.11

<< 左移操做符,左移位後補零;

>>有符號右移操做符,右移後若符號爲正,則在高位插入0,若爲負則插入1。

還有一種無符號右移操做符>>>不管正負都插入0

 

char、byte或short移位前會被轉換成int,且獲得的結果也是int。long移位後獲得的結果是long。

 

第二段有這麼一段話「對char,byte或者short進行移位處理,那麼在移位進行以前,它們會自動轉換成一個int。只有右側的5個低位纔會有用。這樣可防止咱們在一個int數裏移動不切實際的位數。若對一個long值進行處理,最後獲得的結果也是long。此時只會用到右側的6個低位,防止移動超過long值裏現成的位數。」 不理解,感謝@阿信sxq的解答,把答案也放在這裏供你們參考:

對上面那段話的理解是:移位操做符操做的運算對象是二進制的「位」,int類型是32位也就是2的5次冪 !若是移32位以上,那麼原來的數的信息會所有丟失,這樣也就沒有什麼意義了!因此上面的「只有右側的5個低位纔會有用」說的是:移位操做符右端的那個數(化成二進制)的低5位纔有用,即
X < <y;
是指y的低5位纔有用,即不能大於32。 而對於long型也是一樣的道理!
所以,若是對一個int 型,進行移位,X < <y; 當y小於32時,移位後的結果通常都在咱們的預料當中;而若是y大於32時,因爲移位超出了int所能表示的範圍,這時就先把y化成二進制數,而後取該二進制數右端的低5位,再把這5位化成十進制,此時的這個十進制就是要對X移動的位數。
例如: int int a=140;
a << 34
System.out.println(Integer.toBinaryString(a << b));
上面那兩個語句的執行過程是:先把a化成二進制數:10001100

執行語句 a << 34 對a左移32位時,先把 34化成二進制:100010,對該二進制數取右邊5位,即00010,化成十進制數爲2,因此其實是對a左移兩位。如今,地球人都會知道上面程序的輸出結果是:1000110000

 

 

 

在使用>>>=應注意,若是對byte或short值進行移位,它們會先被轉換成int,再進行右移操做,而後被階段賦值給原來的類型,這可能會獲得-1的結果。

 

練習13中要對char類型以二進制形式展現,調用Integer.toBinaryString()方法將char類型做爲參數傳入便可。而若是在System.out.println方法直接傳入char打印出的是字符,將char轉換爲int打印出數值。

 

3.15

Java容許把任何基本數據類型轉換成其餘基本數據類型,除布爾型外。類數據類型不容許轉換,除非類族之間的轉換。

 

類型提高,對基本類型執行算術操做和按位操做,只要類型比int小,那麼運算以前這些值會自動轉換成int。

因此要將結果賦值給原類型須要顯示類型轉換,而+=這樣的複合操做符不須要這樣的轉換,它能夠自動轉換。

相關文章
相關標籤/搜索