指的是從一種類型,轉換為另外一種類型。例如:“123” 字元串 可以轉換為 整形 123。 類型轉換分為:強制轉換 (顯示轉換)與 隱式轉換 按記憶體分類:裝箱,拆箱 1. 隱式轉換 對於內置數值類型,如果要存儲的值無需截斷或四捨五入即可適應變數,則可以進行隱式轉換。 對於整型類型,這意味著源類型的範 ...
類型轉換分為:強制轉換 (顯示轉換)與 隱式轉換
按記憶體分類:裝箱,拆箱
1. 隱式轉換
對於內置數值類型,如果要存儲的值無需截斷或四捨五入即可適應變數,則可以進行隱式轉換。 對於整型類型,這意味著源類型的範圍是目標類型範圍的正確子集。 例如,
int num = 30; long bigNum = num; // 存在隱式轉換 int==>long doubble d = 10; // int==>double string str = "10"; string result = str+num; // 會先將num轉換為string,然後再進行字元串拼接,result= "1030" sbyte a = 127; sbyte b = 127; // b = b +a; // 報錯,因為溢出 b += a; // 編譯通過,結果 154,b 變數 隱式轉換int
2. 強制轉換
如果進行轉換可能會導致信息丟失,則編譯器會要求執行顯式轉換,顯式轉換也稱為強制轉換。 強制轉換是顯式告知編譯器以下信息的一種方式:你打算進行轉換且你知道可能會發生數據丟失,或者你知道強制轉換有可能在運行時失敗。 若要執行強制轉換,請在要轉換的值或變數前面的括弧中指定要強制轉換到的類型。 下麵的程式將
double x = 1234.7; int a; // double ==> int. a = (int)x; System.Console.WriteLine(a); double x = 1234.7; int a; // double ==> int. a = int.Parse(x); System.Console.WriteLine(a); double x = 1234.7; int a; // double ==> int. a = Convert.ToInt32(x); System.Console.WriteLine(a); int a=30; // 轉換為字元串 string s1 = a.ToString(); string s2 = Convert.ToString(a);
Convert 類 很強大
-
Convert.ToInt32()
: 轉換為int -
Convert.ToInt64()
: 轉換為long -
Convert.ToString()
: 轉換為String -
Convert.ToByte()
: 轉換為byte -
Convert.ToChar()
: 轉換為Char字元 -
......
引用類型之間的轉換
class Program { static void Main(string[] args) { // 引用類型如果沒有賦值,預設值是null object per = new Person(); // 創建一個類對象 Person person1 = per as Person; // 使用 as 進行強制轉換 Person person2 = (Person) per;// 強制轉換 } } // 聲明一個類 class Person { }
3. 裝箱與拆箱
裝箱 就是把“值類型”轉換成“引用類型”(Object);
拆箱 就是把“引用類型”轉換成“值類型”;
int i = 3; //分配在棧上 //裝箱 boxing object o = i;//隱式裝箱操作,int i 在堆上 object b = (object)i;//顯示裝箱操作 //拆箱 unboxing int j = (int)o;//顯示拆箱(將對象o拆箱為int類型) //int k = b;//error!!, 不能隱式拆箱
拆箱 的操作包括
1,檢查對象實例,以卻確保它是給定值類型的裝箱值。
2,將該值從實例複製到值類型變數中。
下麵來看看這個例子:
int i=0; System.Object obj=i; Console.WriteLine(i+","+(int)obj);
其中共發生了3次裝箱和一次拆箱!^_^,看出來了吧?! 第一次是將i裝箱,第2次是輸出的時候將i轉換成string類型,而string類型為引用類型,即又是裝箱,第三次裝箱就是(int)obj的轉換成string類型,裝箱! 拆箱就是(int)obj,將obj拆箱!!
拆箱與拆箱都會對記憶體進行操作,對性能有一定的影響,在日常編程開發中應儘量避免。
4. 作業
-
從控制台輸入一個數字字元串,強制轉換為整形
-
從控制台輸入三角形的底和高,計算三角形的面積。
-
從控制台輸入一個數字,然後左移1位,輸出它的二進位結果。
-
請指出哪些語句包含了裝箱, 哪些屬於拆箱
object o = 10; object obj = "30"; double d = 20; int a = ++d; string s = "15" + 15; int b = Convert.ToInt32(s); object obj2 = a.ToString(); long a = Convert.ToInt64(10.2m);
視頻教程:
譽尚學教育_譽尚學教育騰訊課堂官網 (qq.com)
或者:C# 最強入門編程(.Net 學習系列開山巨作)_嗶哩嗶哩_bilibili