1. 程式人生 > >Java編程思想總結筆記Chapter 3

Java編程思想總結筆記Chapter 3

出現 需要 equals 最好 post 簡單 code 細節 print

本章需要總結的不多,但細節的東西需要註意,有些很容易遺忘。

第三章

目錄:

  • 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