zoukankan      html  css  js  c++  java
  • 装箱与拆箱

     装箱和拆箱是一个抽象的概念 

    ——————————————————————————————————————————————————

     装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型 
     利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来

    ——————————————————————————————————————————————————

    NET的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对象。如果申明这些类型得时候都在堆(HEAP)中分配内存,会造成极低的效率!(个中原因以及关于堆和 栈得区别会在另一篇里单独得说说!)
    .NET如何解决这个问题得了?正是通过将类型分成值型(value type)和引用型(regerence type),C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct),引用类型包括:类、数组、接口、委托、字符串等。
    值型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;
    引用型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的,值型不用,超出了作用范围,系统就会自动释放!
    下面就来说装箱和拆箱的定义!
    装箱就是隐式的将一个值型转换为引用型对象。比如:
    int i=0;
    Syste.Object obj=i;

    这个过程就是装箱!就是将i装箱!
    拆箱就是将一个引用型对象转换成任意值型!比如:
    int i=0;
    System.Object obj=i;
    int j=(int)obj;

    这个过程前2句是将i装箱,后一句是将obj拆箱!

  • 相关阅读:
    Spark笔记
    java.lang.ClassNotFoundException: org.apache.storm.topology.IRichSpout
    异常分类
    手动调用run方法和普通方法调用没有区别
    URI is not registered ( Setting | Project Settings | Schemas and DTDs )
    谷歌浏览器远程计算机或设备将不接受连接解决方法
    模块2复习
    day09作业01用户登录与验证
    022测试对文档进行读取与写入
    0221判断登录是否成功小程序
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1966617.html
Copyright © 2011-2022 走看看