本章需要總結的不多,但細節的東西需要注意,有些很容易被遺忘。
第三章
#目錄:
3.1 更簡單的列印語句
#3.2 使用Java運算子
3.3 優先權
3.4 賦值
# 3.5 算數運算子
3.6 自動遞增與遞減
3.7 關係運算子
3.8 邏輯運算子
3.9 直接常數
#3.10 位元運算子
#3.11 移位運算子
3.12 三元運算子if-else
#3.13 字串運算子+ 和+=
#3.14 使用運算元時常犯的錯誤
#3.15 類型轉換運算元
#3.16 Java沒有sizeof
#3.17 運算子小結
3.18 總結
#3.2 使用Java運算子
#運算子為「=」、「==」和「==」能夠操作所有的物件。
3.4 賦值
若物件使用c=d,那麼c和d都指向原本只有d指向的那個物件。
#當t1 = t2 時(別名現象),接著修改t1 同時也會改變t2,因為t1、t2 包含相同的引用,指向相同的物件。
3.6 自動遞增與遞減
####a = 15,++a、--a: System.out.printf("~output:" + a++); //~ output:15a = 15,a++、a--: System.out.printf("~output:" + ++a); // ~ output:16###
3.7 關係運算子
#上面兩個Integer物件內容相同,但引用卻不同的,而==和!=比較的就是物件的參考(基本型別直接比較值,並沒有引用)。若想比較物件內容,使用equals()方法。
注意:equals() 方法的預設行為是比較引用,所以必須在自己的新類別中覆寫e quals() 方法,否則不會出現你想要的效果。大多數Java類別庫都覆寫了equals()方法,以便可以比較物件的內容。範例如下:
#3.9 直接常數
十六進位:前綴0x 、 八進位: 前綴0 、 二進位沒有直接常數的表示方法。
指數數法: 1.39e-43#f 表示1.39 * 10-43 e 代表「10的冪次方」。
3.10 位元運算子
位元運算符的運算物件是二進位的「位元」(位元),Java對它的設計初衷是嵌入電視機機上盒內,所以這種面向底層的操作仍被保留下來。但是很少用到為操作符。
&與 |或 ^異或 ~非,將布林類型視為單一位元值的話,不能執行非位元(~),為了避免與邏輯NOT混淆。位元運算子與邏輯運算子類似,但沒有短路效果 。
3.11 移位運算子
#運算物件是二進位的“位元”,只可用於處理整數類型(布林類型不行)。
負數要先轉換成補碼再運算就不介紹了。
左移(高位的n個0被捨去,最低位補n個0)<<:
11的二進位形式為1011 11<<2 之後的二進位為101100 所以11<<2# = 44 相當於整數11*2n
右移(低位的n個數字移出,在高位補n個零)>>:
11的二進位形式為1011 11>>2 之後的二進位為0010 所以11>>2 = 2 相當於整數11/2n
無符號右移運算子>>>: 無論正負向低位移出n個數字,在高位補n個零
注意:對byte或short值進行無符號右移(#>>>),得到的可能不是正確的結果。它們先被轉換成int類型,再進行右移操作,然後被截斷,賦值給原來的類型,在這種操作的情況下可能得到-1的結果,例子如下:
位元運算組合級執行速度是很快的,所以面試的時候可能會問:Java中用最有效率的方法算出2 乘以8 等於幾? 答:2 << 3
實際意義不大,這點速度提高沒意義,程式碼不直觀。
#3.16 Java沒有sizeof
Java不需要sizeof()運算符,因為所有資料類型在所有機器中的大小都是相同的,不必考慮「移植」問題。
#總結:太容易的知識點,又常用到就不在筆記中出現,全部出現還不如重新看書。
#今天在某軟體看到這樣的吐槽
#看到立刻想到Java程式設計想法的第二章裡面的知識點:
當變數作為類別的成員使用時,Java確保給定其預設值,來確保基本類型成員變數被初始化(初始值可能不是你想要的,最好自己初始化)。注意預設初始化的方法不適用於非某個類別的欄位變量,忘記初始化,Java會在編譯時傳回錯誤給你。
堆疊:位於通用RAM(隨機存取暫存器)中,Java編譯器必須知道儲存在堆疊內所有資料的大小和生命週期,「堆疊指標」向下移動則分配新內存,向上移動則釋放內存,速度僅次於暫存器,基本資料型別和參考存放在此。
局部變數運行時被分配在堆疊中,量大,生命週期短,如果虛擬機器給每個局部變數都初始化一下,是一筆很大的開銷,但變數不初始化為預設值就使用是不安全的。
以上是關於Java程式設計思想總結筆記Chapter3詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!