[PREVIOUS](https://hackmd.io/PHk0DJqvSO-ohdsazSRiCg) # 原始數據類型(Primitive) | 表達| 定義說明| 舉例 | | -------- | -------- | -------- | | Primitive | 一组数据和对其所能进行的操作的集合(Java 语言内置) | int, double, boolean, char | |變數(Variable)|表示某數據類型的值| 任意{標示符} | |標示符 | 由字母、数字、下划线和 $组成的字符串,首字符不能是數字,且不能剛好是Java的保留字。編碼規則請參照編碼慣例 (Java Coding Conventions)。 |a, b, jasonOne, test | |運算符號(算術比較)| 表示某數據類型的運算符號。| + - * / | |邏輯比較| 邏輯運算子用於對布林值 (boolean) 進行操作,並產生一個新的布林值。| && (AND)<br>\|\| (OR)<br>! (NOT) |位元運算|位元運算子用於對整數類型的二進位表示進行操作。| & (AND)<br> \| (OR)<br> ^ (XOR)<br> ~ (NOT)<br> << (左移)<br> >> (右移)<br> >>> (無號右移) ## 運算子重載 (Operator Overloading) 運算子 +、-、*、/ 都是被「重載過」的,某種程度上是正確的,但需要根據 Java 的上下文來理解,"+"這是 Java 中唯一一個真正意義上被重載的運算子,因為它不僅可以用於數值加法,還可以用於字串連接 (String Concatenation)。號:這些運算子在 Java 中並沒有被重載。它們的作用是固定的,只用於數值運算,不會根據上下文對不同類型執行完全不同的操作(例如字串)。 | 數據類型 | 佔用位元 | 範圍 | 運算類型 | 備註 | | :--- | :--- | :--- | :--- | :--- | | **int** | 32 位元 | $[-2^{31}, 2^{31}-1]$ | 算術、位元、比較 | 最常用的整數類型。 | | **char** | 16 位元 | `\u0000` 到 `\uffff` (0-65535) | 算術、比較 | 用於表示單一的 Unicode 字元。本質上是無符號整數,可進行數值運算。 | | **double** | 64 位元 | 約 $4.94 \times 10^{-324}$ 到 $1.8 \times 10^{308}$ | 算術、比較 | 雙精度浮點數,Java 預設的浮點數類型。 | | **boolean** | 8 位元 | 只有 `true` 和 `false` | 邏輯、比較 | 用於邏輯判斷,不能進行算術運算。 | ## 轉型 * 自動型別升級 (Automatic Type Promotion) 當你在一個運算式中,使用了不同數值型別的資料時,Java 為了避免資料流失(也就是避免算出來的結果不準),會自動將精確度比較低的型別,提升成精確度比較高的型別。 ```java /* * 型別自動提升的例子 */ dobule a = 1+ 2.5;//1 是一個 int 整數型別。2.5 是一個 double 浮點數型別。 ``` 因為 double 比 int 更精準,Java 會很貼心地把 1 升級成 double 型別的 1.0,然後再進行運算。所以,這個運算式最後的結果會是 double 型別的 3.5。這種轉換是「隱性」的,編譯器會自動幫你做,不需要你寫任何額外的程式碼。 * 強制型別轉換 (Explicit Type Casting) 當你想要把一個「精確度比較高」的型別,轉換成「精確度比較低」的型別時,你就需要「顯性」地告訴編譯器:「我已經知道可能會遺失資料,但我還是要這樣做」。這就是透過在資料前面加上(目標型別)來達成。 ```java /* * (int)3.7:把 double 型別的 3.7 強制轉換成 int 整數。 * 這個過程是「直接捨去」小數點後面的部分,所以結果會變成 3,而不是 4。 * * (double)3:把 int 型別的 3 轉換成 double 型別。 * 雖然這個轉換也可以自動發生,但你也可以自己寫出來,讓程式碼看起來更清楚。 * * var 關鍵字會根據賦值(6.0)的型別來自動推斷變數 test 的型別。 * 因為 6.0 是 double 型別,所以 test 也會被宣告成 double 型別。 * * var 關鍵字是從 Java 10 開始引入的。 */ var test =(int)3.7 + (double)3; //6.0 (double) ``` [NEXT](https://hackmd.io/TDRwQLaiQBqOZiLbNtv1lg)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up