zoukankan      html  css  js  c++  java
  • 装箱(boxing)和拆箱(unboxing)

    Object是引用类型,但是它的子类Int32竟然不能去Object能去的“要求必须是引用类型” 

    的地方,违反了继承的原则,所以需要把Int32装在Object中才能传递。

    装箱:从值类型接口转换到引用类型。

    拆箱:从引用类型转换到值类型。  

                object obj = null;//引用类型

                obj = 1;//装箱,boxing。把值类型包装为引用类型。

                int i1 = (int)obj;//拆箱。unboxing

    2)下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的

    int i=10;

    object obj = i;

    int j = obj;

    分析:在inboxing(装箱)时是不需要显式的类型转换的,不过unboxing(拆箱)需要显式的类型转换,所以第三行代码应该改为:

    3 int j = (int)obj;    

    要掌握装箱与拆箱,就必须了解CTS及它的特点:

        NET重要技术和基础之一的CTS(Common Type System)。CTS是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型分成两大类 :值类型和引用类型。

    CTS中的所有东西都是对象;所有的对象都源自一个基类——System.Object类型。值类型的一个最大的特点是它们不能为null,值类型的变量总有一个值。为了解决值类型不可以为null,引用类型可以为null的问题,微软在.Net中引入了装箱和拆箱:装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱

    (*)

    object.ReferenceEquals();//用来判断两个对象是否是同一个对象

    Console.WriteLine(object.ReferenceEquals(3,3));//因为两个3被装到了两个箱子中,所以是false

    Equals ==的关系

  • 相关阅读:
    window、BOM、 document、 DOM
    React事件处理和原生JS事件处理
    React项目性能优化
    React条件渲染
    Aqua Data Studio中文乱码
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    Myeclipse 全局搜索的时候报错problems encountered during text search
    PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
    工作总结
    前进中不能迷失方向--Java程序员职业发展路线
  • 原文地址:https://www.cnblogs.com/boke1/p/11056669.html
Copyright © 2011-2022 走看看