變數和常量

2022-01-15 15:17:10 字數 3056 閱讀 2131

c#中的變數型別根據其定義可以分為兩種,一種是值型別,另一種是引用型別,這兩種型別的差異在於資料的儲存方式,

值型別的變數本身直接儲存資料,而引用型別則儲存實際資料的引用,程式通過引用找到真正的資料。

值型別:值型別變數直接儲存其資料值,主要包含整數型別、浮點型別以及布林型別等等,值型別變數在堆疊中進行分配,因此效率很高,使用值型別的主要目的是為了提高效能。

值型別的特性:

1.值型別變數儲存在堆疊中

2.訪問值型別變數,一般都會訪問其實例

3.每個值型別變數都有自己的資料副本,因此對乙個值型別變數的操作不會影響其他變數

4.複製值型別變數時,複製的是變數的值,而不是變數的位址

5.值型別的變數不能為null值,必須有乙個確定的值

6.值型別是從system.valuetype類繼承的型別

基本的值型別:

1.整數型別(代表一種沒有小數點的整數數值,在區域性變數時,要對其初始化,byte是乙個8位無符號整數(0-255取值範圍內))

2.浮點型別 single(主要包含了float和double兩種數值型別,如果不做任何操作,其預設值包含小數點的數值都被認為是double型別,

float:如果要將數值以float型別來處理,就應該通過強制使用f和f將其強制指定為float型別。

float themysum=9.27f;

float themysums=1.27f;

double:如果要將數值以double型別來處理,就應該通過強制使用d和d將其強制指定為double型別

double mydou=927d;

double mydou=927d;

注意:如果需要使用float型別變數時,必須在數值的後面跟隨f或f,否則編譯器會直接將其作為double型別處理,

也可以在double型別的值前面加上float,對其進行強制轉換double mydou=float(927.77);

3.布林型別:布林型別主要用來表示true/false值,乙個布林型別的變數,其值只能是true或者false,

不能將其值他的值指定給布林型別變數,布林型別變數不能與其他型別進行轉換,bool x=927,這樣的賦值顯然是錯誤的,編譯器會返回提示"常量927無法轉換為bool",

布林型別變數大多數被應用到流程控制語句,例如迴圈語句或者if語句等,

注意:在定義全域性變數時,如果沒有特定的要求不要對其進行初始化,整數型別和浮點型別的預設初始化值為0,布林型別的初始化為false

引用型別:引用型別是構建c#應用程式的主要物件型別資料,在應用程式執行的過程中,預先定義的物件型別以new建立物件例項,

並儲存在堆疊中,堆疊是一種由系統彈性配置的記憶體空間,沒有特定大小及存活時間,因此可以被彈性的運用於物件的訪問

引用型別具有以下特性:

1.必須在託管堆中為引用型別變數分配記憶體

2.必須使用new關鍵字來建立引用型別變數

3.在託管堆中分配的每個物件都有與之相關的附加成員,這些成員必須得初始化

4.引用型別變數是由垃圾**機制來管理的

5.多個引用型別物件可以引用同乙個物件,這種情形下,對乙個變數的操作會影響另乙個變數所引用的同一物件

6.引用型別被賦值前都是null

值型別和引用型別的區別:

在概念上來看,值型別直接儲存其值,而引用型別儲存對其值的引用,這兩個型別儲存在這記憶體的不同地方,從記憶體空間上來看,值型別是在棧中操作,而引用型別則在堆中分配記憶體,棧在編譯時就分配好記憶體,在**中有棧的明確定義而堆是程式執行中動態分配的記憶體空間,可以根據應用程式的運**況動態地分配記憶體的大小,因此值型別總是在記憶體中占用乙個預定義的位元組數,而引用型別的變數在棧中分配乙個記憶體空間,這個記憶體空間包含的是另乙個記憶體位置的引用,這個位置是託管堆中的乙個位址

列舉型別:在定義列舉型別時,如果不對其進行賦值,預設情況下,第乙個列舉型別的值為0,而後面的列舉數依次遞增1

其中,大括號{}中的內容為列舉值列表,每乙個列舉值對應乙個列舉值名稱

/// /// 定義乙個列舉型別來判斷今天是星期幾

///

enum mydate

static void main(string args)

console.read();

}

型別轉換:型別轉換就是講一種型別轉換成另一種型別,轉換型別可以是隱式轉換或者顯示轉換

隱式轉換:當一種型別的值轉換為大小相等或者更大的另一型別時,則發生擴大轉換,當一種型別值轉換為較小的另一種型別,則發生收縮轉換

【將int型別的值隱式轉換成long型別】

int i=927;

long j=i; //隱式轉換為long型別

顯式轉換:顯示轉換也可以稱為強制轉換,需要型別之間進行轉換,就需要使用顯示轉換

【將double型別的x進行顯示轉換】

double x = 19810927.102;

int y = (int)x;

double x = 19810927.102;

int y = convert.toint32(x);

裝箱和拆箱:將值型別轉換為引用型別的過程叫做裝箱,反之,將引用型別轉換為值型別的過程叫做拆箱

【裝箱允許將值型別隱式轉換成引用型別】

int i = 2008;

object obj = i;

console.writeline("1.i的值為為,裝箱之後的物件為",i,obj);

i = 927;

console.writeline("2.i的值為為,裝箱之後的物件為", i, obj);

注意的是:將值型別變數複製到裝箱得到的物件中,裝箱後改變值型別變數時,並不會影響裝箱物件的值

【拆箱允許將引用型別顯示轉換成值型別】

int i = 112;

object obj = i;

console.writeline("1.i的值為為,裝箱之後的物件為",i,obj);

int j =(int)obj ;

console.writeline("2.i的值為為,裝箱之後的物件為", i, obj);

注意:拆箱後得到的值型別資料和裝箱的值相等,但是在執行拆箱中,要符合型別一致的原則,否則會出現異常

變數和常量

package com.xy.pf.test.xiti 關鍵字static 1.靜態方法和靜態變數是屬於某乙個類,而不屬於類的物件 2.靜態方法和靜態變數的引用直接通過類名呼叫 3.在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數 反之,則可以 4.可以用類的物件obj來呼叫靜態的方法meth...

常量和變數

常量 固定的資料 四類 整型 浮點型 單精度和雙精度 字元型 字串型 字元型常量 不能是中文,單引號引起來的 字串型常量 雙引號引起來的 變數 表示乙個需要經常改變或者不確定的資料 特點 1.建立了乙個變數相當於在記憶體中占用了一片空間 2.空間的大小是固定的,但裡面的資料可以改變 3.同乙個作用域...

常量和變數

1 常量 vb中常量分為兩種,一種是文字常量,一種是符號常量。1.文字常量 vb的文字常量分為兩種,即字串和數值。1.字串常量 字串常量由字元組成,可以是除雙引號和回車符之外的任何ascii字元。2.數值常量 數值常量共有4重表示方式,即整形數 長整型數 貨幣型數和浮點數。文字常量的四種方式 1.整...