第四单元 类型转换

这篇具有很好参考价值的文章主要介绍了第四单元 类型转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

指的是从一种类型,转换为另外一种类型。例如:“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);

视频教程:

C#入门到精通 - 网易云课堂 (163.com)文章来源地址https://www.toymoban.com/news/detail-463486.html

到了这里,关于第四单元 类型转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于VS报错的一种类型。0xFFFFFFFFFFFFFFF7

    引发了异常: 读取访问权限冲突。 ......是 0xFFFFFFFFFFFFFFF7。 原因:链表的结点只创建,而没有初始化。我的代码中q-tail-next=Node这行报错,是因为即使q-tail存在,但有时候VS对于q-tail-next无法读取未初始化的指针。 当然 我上面代码确实初始化了,而这跟Vs有时候会出现空指针异

    2024年02月06日
    浏览(43)
  • 一种使用Java的快速将Web中表格转换成Excel的方法

            随着后疫情时代的到来,在过去的2022年,全国的经济情况,想必是很多学者和研究对象都非常关心的事。而这些数据在国家统计局网站上都有相应的记录。通过分析这些数据,可以从某一个角度来验证和观察当下的经济情况。         全国共计有1279个县级单

    2024年02月06日
    浏览(39)
  • .NET Emit 入门教程:第四部分:构建类型(Type)

    在动态生成代码的过程中,构建类型(Type)是至关重要的一步。 通过使用 Emit 中的 TypeBuilder,我们可以定义和创建各种类型,包括类、结构体和接口。 本节将深入探讨如何使用 TypeBuilder 动态构建类型,并介绍其在实际应用中的重要性。 通过学习本系列之前的文章,我们可

    2024年03月25日
    浏览(38)
  • Rust 基础入门 —— 字符、布尔、单元 类型

    对于字符类型我们有更大的自由性,概括一下: 更大的编码范围,让rust 可以展示更多的内容。 统一的字节空间,字符也是四个字节的内存大小。 严格区分的 \\\"\\\" 和 \\\'\\\' 前者用于字符串、后者是字符。 说明一点, bool 类型的 应用场景 主要就是用在 流程控制 中, 美妙的新鲜内

    2024年02月12日
    浏览(39)
  • 什么是从人类反馈中强化学习(RLHF)?

    目录 一、什么是RLHF? 二、语言作为强化学习问题 三、用于语言模型的RLHF 四、ChatGPT如何使用RLHF 五、RLHF对语言模型的限制 自从OpenAI公司发布ChatGPT以来,人们对大型语言模型(LLM)的这一重大进步感到兴奋。虽然ChatGPT与其他最先进的大型语言模型大小相同,但其性能要高得多,

    2024年02月17日
    浏览(47)
  • 查看当前分支是从那个分支拉来的

    git reflog --date=local | grep 分支名 这个命令必须在git bash中使用,否则grep识别不了:  在git bash中: 可以查出所有操作记录按倒叙排列 查看当前分支是从那个分支拉来的就可以拉到最后一行查看: 查出是从预发布分支拉来的  

    2024年02月13日
    浏览(45)
  • Python类型转换,数据类型转换函数大全 与 strip()函数介绍

    虽然 Python 是弱类型编程语言,不需要像 Java 或 C 语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换。 比如说,我们想通过使用 print() 函数输出信息“您的身高:”以及浮点类型 height 的值,如果在交互式解释器中执行如下代码: 会发

    2024年01月24日
    浏览(53)
  • JAVA 类型的类型转换

    箭头开始的地方是小类型,箭头指向的地方是大类型 我们此处所指的\\\"大\\\"和\\\"小\\\",指的是对应类型的取值范围,不是字节数哦 byte m = 120; int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用 float f = 3.2f; double d = f; --可以执行 容量大的类型转换为容量小的类型时必

    2023年04月26日
    浏览(25)
  • git 查看某个分支是从哪个分支拉出来的

    原文链接:https://blog.csdn.net/allanGold/article/details/102478157

    2024年02月10日
    浏览(45)
  • Java类型转换和类型提升

    目录 一、类型转换 1.1 自动类型转换(隐式) 1.1.1 int 与 long 之间 1.1.2 float 与 double 之间 1.1.3 int 与 byte 之间 1.2 强制类型转换(显示) 1.2.1 int 与 long 之间  1.2.2 float 与 double 之间  1.2.3 int 与 double 之间 1.2.4 int 与 byte 之间 二、类型提升 2.1 int 与 long 之间 2.2 byte 与 byte 之间

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包