第四单元 类型转换
  AfZgh8qrZuSw 2023年11月02日 184 0

指的是从一种类型,转换为另外一种类型。例如:“123” 字符串 可以转换为 整形 123。

类型转换分为:强制转换 (显示转换)与 隐式转换

按内存分类:装箱,拆箱

1. 隐式转换

对于内置数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。 对于整型类型,这意味着源类型的范围是目标类型范围的正确子集。 例如,long 类型的变量(64 位整数)能够存储 int(32 位整数)可存储的任何值。 在下面的示例中,编译器先将右侧的 num 值隐式转换为 long 类型,再将它赋给 bigNum

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 强制转换为 int。如不强制转换则该程序不会进行编译。

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. 从控制台输入一个数字字符串,强制转换为整形

  2. 从控制台输入三角形的底和高,计算三角形的面积。

  3. 从控制台输入一个数字,然后左移1位,输出它的二进制结果。

  4. 请指出哪些语句包含了装箱, 哪些属于拆箱

    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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   69   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   52   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   44   0   0 .NET
  f18CFixvrKz8   2024年05月18日   85   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   76   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   41   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   59   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
AfZgh8qrZuSw