iOS 邊學邊記 Weak的實現(三)
程式中有很多資料,每一個數據都是有相關的資料型別的,不同資料型別的資料佔用記憶體空間大小不同。資料型別的作用是指導JVM在執行程式的時候該給資料分配多大的記憶體空間。
Java中的資料型別包括兩種:基本資料型別、引用資料型別。
基本資料型別:
基本資料型別分為四大類:
整數型
byte(位元組型):佔用1個位元組數,取值範圍為:~,即-128~127,預設值為0。
short(短整型):佔用2個位元組數,取值範圍為:~,即-32768~32767,預設值為0。
int(整型):佔用4個位元組數,取值範圍為:~,即-2147483648~2147483647,預設值為0。
long(長整型):佔用8個位元組數,取值範圍為:~,即-9223372036854775808~9223372036854775807,預設值為0。
Java語言整數型常量有三種表示方法:十進位制、八進位制、十六進位制。以int為例:
int a = 123;//十進位制,預設預設的方式
int b = 0123;//八進位制,以0開頭。
int c = 0x123;//十六進位制,以0x開頭。
浮點型
Java中浮點型一般預設為double,double與float在計算機中儲存的都是近似值。
double a = 3.0;//正常賦值 //float b = 5.1;//編譯報錯,double型別賦值給float,大容量賦值給小容量,需強制型別轉換 float b = (float)5.1//強制型別轉換 float c = 5.1f;//編譯正常,合法賦值
float(單精度浮點型):佔用4個位元組數,取值範圍大約為F(有效位數6~7位),預設值為0.0f。
double(雙精度浮點型):佔用8個位元組數,取值範圍大約為,(有效位數15位),預設值為0.0d。
布林型
Java中boolean只有true/false兩個值,沒有別的值,常用於邏輯運算與條件控制語句中。
boolean(布林型):佔用1個位元組數,取值範圍為 true\false,預設值為false。
字元型
char(字元型):佔用2個位元組數,取值範圍為:0~,即0~65535,預設值為:'\u0000'。
char的宣告:
char a = '1';//宣告並賦值 char b = '國';//宣告並賦值 a = 'v';//再次賦值
轉義字元\:
char a1 = 'n';//普通的字元n
char a2 = '\n';//換行字元
char a3 = '\\';//反斜槓字元
char a4 = '\t';//製表符
char a5 = '\'';//單引號字元
char a6 = '\u4e2d'//漢字"中",\u合起來轉義;
注:1byte = 8bit,即1個位元組等於8個位元位。
型別轉換:
1、八種基本資料型別中除布林型別之外的7中型別之間都可以相互轉換;
2、小容量向大容量轉換,稱為自動型別轉換容量從小到大排序:byte < short \char < int < long < float < double;注:任何浮點型別不管佔用多少個位元組,都比整數型容量大。char與short可表示的種類數量相同,但是char可以取更大的正整數。
3、大容量向小容量轉換,必須新增強制型別轉換,程式才可以編譯通過,但是可能會損失精度,謹慎使用。
4、當整數字面值沒有超出byte、short、char的取值範圍,可以直接賦值給byte、short、char型別的變數。
5、byte、short、char混合運算的時候,各自先轉成int型別,再做運算。
6、多種資料型別混合運算,先轉換成容量最大的那種型別再作運算。
//在字面值不超出byte取值範圍內,可以不用強制型別轉換,該字面值可以直接賦值給byte。
byte a1 = 127;
//byte a2 = 128; //超出範圍,報錯
byte a2 = (byte)128; //強制型別轉換,損失精度。(原碼、反碼、補碼知識)
long d1 = 12; //int型別的12賦值給long型別的d1,自動型別轉換
long d2 = 2147483648; //2147483648預設是整數,超範圍,報錯:過大的整數。
long d3 = 12L; //不存在型別轉換,直接賦值
//int d4 = d3; //編譯報錯,大容量不能賦值給小容量。
int d4 = (int)d3; //可使用強制型別轉換,編譯可通過,但是使用強制型別轉換可能會損失精度。
double e1 = 10/3; //最後結果為3.0
double e2 = 10.0/3; //最後結果為3.3333333333333335