1. 程式人生 > 其它 >iOS 邊學邊記 Weak的實現(三)

iOS 邊學邊記 Weak的實現(三)

技術標籤:JavaSE零基礎java

程式中有很多資料,每一個數據都是有相關的資料型別的,不同資料型別的資料佔用記憶體空間大小不同。資料型別的作用是指導JVM在執行程式的時候該給資料分配多大的記憶體空間。

Java中的資料型別包括兩種:基本資料型別、引用資料型別。

基本資料型別:

基本資料型別分為四大類:

整數型

byte(位元組型):佔用1個位元組數,取值範圍為:-2^{7}~2^{7}-1,即-128~127,預設值為0。

short(短整型):佔用2個位元組數,取值範圍為:-2^{15}~2^{15}-1,即-32768~32767,預設值為0。

int(整型):佔用4個位元組數,取值範圍為:-2^{31}~2^{31}-1,即-2147483648~2147483647,預設值為0。

long(長整型):佔用8個位元組數,取值範圍為:-2^{63}~2^{63}-1,即-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個位元組數,取值範圍大約為\pm 3.40282347\times 10^{38}F(有效位數6~7位),預設值為0.0f。

double(雙精度浮點型):佔用8個位元組數,取值範圍大約為\pm 1.79769313486231570\times 10^{308},(有效位數15位),預設值為0.0d。

布林型

Java中boolean只有true/false兩個值,沒有別的值,常用於邏輯運算與條件控制語句中。

boolean(布林型):佔用1個位元組數,取值範圍為 true\false,預設值為false。

字元型

char(字元型):佔用2個位元組數,取值範圍為:0~2^{16}-1,即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