Java編程思想總結筆記Chapter 3
本章需要總結的不多,但細節的東西需要註意,有些很容易遺忘。
第三章
目錄:
- 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 包含相同的引用,指向相同的對象。
若想保持兩個對象彼此獨立,可這樣 t1.level = t2.level; 。
3.6 自動遞增和遞減
a = 15,++a、--a: System.out.printf("~output:" + a++); //~ output:15
a = 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-43f 表示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編譯器必須知道存儲在堆棧內所有數據的大小和生命周期,“堆棧指針”向下移動則分配新內存,向上移動則釋放內存,速度僅次於寄存器,基本數據類型和引用存放在此。
局部變量運行時被分配在棧中,量大,生命周期短,如果虛擬機給每個局部變量都初始化一下,是一筆很大的開銷,但變量不初始化為默認值就使用是不安全的。
轉載註明:http://www.cnblogs.com/wujiancheng/
Java編程思想總結筆記The first chapter
Java編程思想總結筆記Chapter 2
Java編程思想總結筆記Chapter 3