標籤:轉換 設計 生命週期 java編程思想 編譯 richtext 運行 height ref
本章需要總結的不多,但細節的東西需要注意,有些很容易遺忘。
第三章
目錄:
- 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: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-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編譯器必須知道儲存在堆棧內所有資料的大小和生命週期,“堆棧指標”向下移動則分配新記憶體,向上移動則釋放記憶體,速度僅次於寄存器,基礎資料型別 (Elementary Data Type)和引用存放在此。
局部變數運行時被分配在棧中,量大,生命週期短,如果虛擬機器給每個局部變數都初始化一下,是一筆很大的開銷,但變數不初始化為預設值就使用是不安全的。
轉載註明:http://www.cnblogs.com/wujiancheng/
Java編程思想總結筆記The first chapterJava編程思想總結筆記Chapter 2
Java編程思想總結筆記Chapter 3