zoukankan      html  css  js  c++  java
  • C#装箱,拆箱和强制转换(转)

    出处:https://www.cnblogs.com/fengjiulin110120/p/6605739.html

    关系:

    强制转换就包含有装箱拆箱操作,装箱就是把值类型转换成引用类型,反之就是拆箱.

    一:  装箱和拆箱:

    装箱是把值类型转换成引用类型,而拆箱是把引用类型转换成值类型;

    利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来.
     例如: 
    int val = 100; 
    object obj = val; 
    Console.WriteLine (“对象的值 = {0}", obj); 
    这是一个装箱的过程,是将值类型转换为引用类型的过程

    int val = 100; 
    object obj = val; 
    int num = (int) obj; 
    Console.WriteLine ("num: {0}", num); 
    这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程 

    注意:被装过箱的对象才能被拆箱;

    二:   内存分配:

      值类型只会在栈中分配。
          引用类型分配内存与托管堆。
          托管堆对应于垃圾回收。

    三:   强制转换:

       (引用)

    1.任何一门编程语言均有相关数据类型。C#也不例外,其基本数据类型有int,short,long,float,double,string等。数据类型之间可以相互转换。不过转换过程要注意小类型能转换成大类型,但大类型一般不能转换成小类型,也就是说低精度无条件转高精度,高精度转低精度需要添加转换条件。如int型可以转换成float型,但float型不一定可以转换成int型,至少这在C,C++是这样,但在C#中明显有了改变.

    例如:

    double dbl_num=12345678910.456;
    int k = (int) dbl_num ;//此处运用了强制转换

    以上代码如果在C,C++中强制转换成int型,肯定会出错,但现在在C#中却不会出错了,不过转换后的值往往是溢出值,是不精通的。这点需要大家注意。

    2.采用另一种方式转换类型,如int.parse(),int32.parse()等采用方法来转换.

    string str="100";

    int i=int.Parse(str);

    注意:str除掉引号的类型必须和*.Parse的类型一致。如果将100改成100.78,即变成float类型,运行时将会报错”输入字符串的格式不正确.”

    3.采用后缀式转换,如k.toString(),一般运用于字符串或日期等其它类型

    int i=100;

    string s=i.ToString();

    4.采用Convert类来实现转换,该类基本支持所以类型之间的转换

    string str="100";

    int i = Convert.ToInt16(str);

    注意:str除掉引号的类型必须和Convert.*的类型一致。如果将100改成100.78,即变成float类型,运行时将会报错”输入字符串的格式不正确.”

     

  • 相关阅读:
    【spring cloud】spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient
    【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
    【IntelliJ IDEA】idea显示工具栏
    笔记:git基本操作
    Spring Boot中使用AOP统一处理Web请求日志
    Spring Boot应用的后台运行配置
    RSA加密
    Java汉字md5值不一致问题
    如何判断一个请求是不是ajax请求
    SpringBoot拦截器中service或者redis注入为空的问题
  • 原文地址:https://www.cnblogs.com/smileberry/p/9914735.html
Copyright © 2011-2022 走看看