Java中的基本資料型別、型別轉換規則(自動、強制)、原反補碼、使用者自定義識別符號
基本資料型別
資料型別指明瞭變數和表示式的狀態和行為。
基本資料型別 | 關鍵字 | 記憶體中佔用位元組數 | 取值範圍 |
---|---|---|---|
布林型 | boolean | 1位元組(8bit) | true、false |
位元組型 | byte | 1位元組(8bit) | -27~27-1 |
短整型 | short | 2位元組(16bit) | -215~215-1 |
整形 | int | 4位元組(32bit) | -231~231-1 |
長整形 | long | 8位元組(64bit) | -263~263-1 |
字元型 | char | 2位元組(16bit) | ‘\u0000’~’\uffff’ |
單精度浮點型 | float | 4位元組(16bit) | |
雙精度浮點型 | double | 8位元組(64bit) |
byte解釋型別 資料型別長度用型別名首字母大寫.size
Java是一種強型別語言,所有變數必須先明確定義資料型別才能使用。
- 常量
Java程式執行時,值不能修改的資料稱為常量。
- 整形常量(byte、short、int、long)
- 浮點常量(float、double)
- 字元型常量(char)
- 布林常量(boolean)
- null
- 變數
變數的本質是:記憶體中的一段連續的儲存空間。
變數名:為了區分其他變數而給變數起的名字。
命名原則:以 (美元符號)、_(下劃線)、英文字母和數字字元組成的非關鍵字。
變數名大小寫敏感。
若由單個單片語成,則變數名全部小寫;若由多個單片語成,則變數名第一個單詞小寫拼接成的每個單詞首字元大寫其餘均小寫(駝峰式命名)。
變數名儘可能提高語義性(增加程式可讀性)。
變數的定義語法
基本資料型別 變數名 = 初始化變數;資料型別一旦定義永遠不變
一行只定義一個變數;未初始化的變數不能參與賦值操作!
同一個作用域(一對對應的{}內的部分)不能包括兩個同名變數。
型別轉換
-
自動型別轉換(自動型別提升)
程式在執行時計算機自動的轉化為所需要的資料型別。
自動資料型別轉換隻能將資料型別從位元組短到位元組長的轉換而且不能將相同長度下由浮點自動轉換為整形(不能從float自動轉換為int。也不能從double自動轉換為long)。因為資料會丟失不能編譯。
其中在賦值運算中,當整數常量(在未超過int所能表示的最大範圍時)參與和變數的運算時,整數常量被計算機自動的識別為int型別(也就是說byte或short和整數參與運算時自動地轉換為int)然後根據與變數的資料型別關係來決定是否進一步進行自動型別的轉換(也就是說表示式的型別由整數數值的int型別和與其運算的變數的資料型別來決定)。浮點常量(在未超過double所能表示的最大範圍時)被計算機自動是被為double型別(也就是說float和小數參與運算時自動地轉換為double)。 -
強制型別轉換(可能造成資料損失)
(型別說明符) 表示式
其中boolean不能參與型別轉換。
常量優化機制:常量表達式(常量的運算)運算的結果是否在被賦值元素型別的範圍內(同長度下不能從浮點到整形),在範圍內不報錯,否則報錯。
運算子
Java中地各種運算的符號稱為運算子,運算子的物件叫運算元。只需要一個運算元的運算子叫單目運算子。
-
算數運算子
+由兩個作用 數值相加(注意自動型別轉換) 和 連線符
當+兩端都是數字時,+作用是數值相加。當+有一端為字串時,+將他們拼接為字串。
- 減
* 乘
/ 除(當兩個型別都是整形時,結果為去掉小數部分的整數。有一端為浮點數時,結果為浮點數)
% 取餘數
++ 變數結果增1
– 變數結果減1
自增自減運算子++n(置前自增)先給n的值自增在參與下面的運算,n++(滯後自增)是先用n的值來參與下一步的運算,再給n的值增1。(也就是說在滯後自增中的一個表示式該變數只進行一步運算就進行一次自增)。 -
關係運算符
用於比較兩個運算元,運算結果時布林型別的值true或false。
< 小於
> 大於
== 判斷是否等於
<= 判斷是否小於或者等於
>= 判斷是否大於或者等於 -
邏輯運算子
條件表示式)!(邏輯非) &(邏輯與) |(邏輯或) ^(異或) &&(短路邏輯與) ||(短路邏輯或)
邏輯運算子的運算結果只能是boolean型別。結果只能是true或者false。
邏輯運算子 結果
!true false
!false true
true & true true
true & false false
false & true false
false & false false
true | true true
true | false true
false | true true
false | false false
true ^ true false
true ^ false true
false ^ true true
false ^ false false
true && true true
true && false false
false && 任意邏輯值 結果均為false
true || 任意邏輯值 結果均為true
false || true true
false || false false
& 和 && 、 | 和 || 的區別是:(運算結果一致)& 和 | 是把邏輯表示式全部計算完,而 && 和 || 運算具有短路運算功能。短路運算是是指系統從左到右進行邏輯運表示式的計算,只要判斷出結果計算過程就終止(右邊部分不再執行!)。 -
位運算子
位運算子是直接對二進位制補碼進行運算
二進位制位單位進行的運算,他的運算元和運算結果都是整形值。位運算子共有7個。位與(&)、位或(|)、位非(~)、左移(<<)、右移(>>)、0填充右移(>>>)也就是無符號右移。
區分邏輯運算子和位運算子的方法:觀察運算子兩端的資料型別。均為boolean型別時為邏輯運算子。均為數值型別時為位運算子。
eg:
3 & 4
0000 0011 & 0000 0100
0000 0000
0
3 | 4
0000 0011 | 0000 0100
0000 0111
7
3 ^ 4
0000 0011 ^ 0000 0100
0000 0111(補碼)
7 -
賦值運算子
=雙目運算子,用於 將賦值符右邊運算元的值複製一份賦值給左邊的變數。
賦值運算子左側只能是變數而不能是表示式。
當左邊資料型別與右邊表示式結果或變數資料型別不一致時,計算機自動進行資料型別轉換,或者人為進行強制型別轉換。
float a = 3.14f;
複合賦值運算子
a+=b;形式等於a = a + b;(實際又有不同)
-= *= /= %=類似以上
byte a = 1;
a = a + 1; 編譯錯誤! 應為此處1自動型別轉換為int而a + 1的整體結果為int型別,int型別不能自動型別轉換為byte。
a += 1;編譯成功,假如超出範圍,資料型別依然是byte! -
條件運算子(三目運算子)
條件表示式 ? 表示式1 : 表示式2;
計算條件表示式的結果,若結果為true則這個三元表示式的結果是表示式1的值;若結果為false則這個三元表示式的結果是表示式2的值。
進位制及其進位制轉換
計算機內部使用二進位制來運算、儲存、傳輸各種資訊。
二進位制由0和1組成 任何X進位制都是用從0開始到X-1種陣列成(10以內為數字超過10則用A、B、C等替代)
二進位制資料B 由0 和 1組成 表示 形式 0b二進位制
八進位制資料O 由0 1 2 3 4 5 6 7 組成 表示 形式 0八進位制
十進位制D 由0 1 2 3 4 5 6 7 8 9組成 表示 形式 十進位制
十六進位制H 由0 1 2 3 4 5 6 7 8 9 A B C D E F表示 形式 0x十六進位制
進位制轉換規則
-
任意X進位制向十進位制轉換
係數乘以基數的權次冪 -
十進位制向任意X進位制轉換
將這個數的整數部分一直除以X記錄餘數 再將商拿出來當作下一輪的被除數繼續除X取餘 直到商為零 反向寫出餘數則得到這個數的整數部分的X進位制數
將這個數的小數部分一直乘以X的結果除以1 記錄這個結果 再將餘數拿出來當作下一輪的乘數繼續乘以X 直到積為0或者到達所需精度 正向得到這個結果放在小數後面則得到了這個數的小數部分的X進位制數
原碼、反碼、補碼
- 原碼
為了表示負數,引入原碼概念。將n位定長下二進位制最高為當作符號位,0為整數,1為負數。其餘n-1位標識二進位制數值位。 - 反碼
針對正數而言,反碼等於原碼。
針對負數而言,反碼是從原碼符號位不變、數值位按位取反得到的。 - 補碼(計算機內部用補碼錶示)
針對正數而言,補碼等於反碼等於原碼。
針對負數而言,補碼是從負數的反碼基礎上末位(最低位)加一得到的。即“(原碼)除符號位外,按位取反,末位加一”
識別符號和關鍵字
以$(美元符號)、_(下劃線)、英文字母為首字元,由$(美元符號)、_(下劃線)、英文字母和數字字元組成的非關鍵字。
識別符號大小寫敏感。
- 關鍵字
被Java賦予關鍵意義的、用於專門用途的字元序列稱為關鍵字。
資料型別:boolean、byte、short、int、long、char、float、double。
包引入和宣告:import、package。
類和介面宣告:class、extends、implements、interface。
流程控制:if、else、switch、do、while、case、break、continue、return、default、while、for。
異常處理:try、catch、finally、trow、throws。
修飾符:abstract、final、native、private、protected、public、static、synchronized、transient、volatile。
其他:new、instanceof、this、super、void、assert、enum、strictfp。