zoukankan      html  css  js  c++  java
  • C# 装箱与拆箱转换

    一、装箱转换(boxing)

      装箱时一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型类型对象并返回对象引用,简单来说就是将值类型转换为引用类型

      任何值类型ValueType都可以被隐式转换成object类型、System.ValueType或Interface(如果值类型实现了Interface)

    int i = 123;
    object obj = i;

      装箱的过程中,首先在内存中创建 int 类型对象,然后将 i 的值复制到这个对象,最后将 int 对象的引用返回给 obj

                              

      装箱只是创建副本,在装箱产生之后,该值有原始值类型和引用类型两份副本,彼此相互独立,下面代码可以展示这一特征

    using System;
    
    namespace 装箱
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i = 10;
                object obj = i;
                Console.WriteLine("i = {0}, obj = {1}", i, obj);
    
                //对i和obj进行不同的赋值
                i = 15;
                obj = 111;
                Console.WriteLine("i = {0}, obj = {1}", i, obj);
                Console.ReadLine();
            }
        }
    }

    结果:    

      

    二、拆箱转换(unboxing)

      拆箱转换时显式转换,是将object类型或Interface类型转换为值类型的过程,拆箱时系统会检测要拆箱的实例,确保他是给定值类型的装箱值后,再把其值赋值到变量

    int i = 12;
    //对i进行装箱
    object obj = i;
    //对obj进行拆箱
    int j = (int) obj;

      尝试将一个值拆箱为非原始类型时会抛出InvalidCastException异常,因此拆箱时的值类型因和装箱时的值类型一致

  • 相关阅读:
    网站并发量的计算方法
    Kubernetes-1.16部署之一 ETCD+K8s+Calico
    CentOS 7和Ubuntu 18.04安装Docker
    Tomcat8的kryo序列化方式session共享
    Tomcat启动慢问题解决
    Memcached集群配置
    sed命令使用方法
    python数据分析与算法之五 算法
    python数据分析与算法之四 二叉树和排序二叉树
    python数据分析与算法之三 顺序表和链表
  • 原文地址:https://www.cnblogs.com/forever-Ys/p/10298080.html
Copyright © 2011-2022 走看看