C#之拆箱,装箱

C#的数据类型分为三类,值类型,引用类型和指针类型。指针类型只能用于不安全模式,而值类型和引用类型通过拆箱和装箱机制可以相互转换,通过中间的object类型,所以C#的所有种类直接或间接地从object类种类派生而来。

值类型

值类型数据存储在栈中,栈用于存放固定长度的数据,分为简单类型,结构类型和枚举类型。

结构类型:把不同类型的数据组合在一起,便于使用。跟类相似,包含数据成员和函数成员的数据结构,类类型是一种引用类型。结构类型用关键字Struct定义,可以嵌套定义。

枚举类型:成员只能是整数类型,枚举类型主要用于表示一组逻辑上相关项的组合,使用关键字Enum来定义。

结构类型的变量值包含了所有成员的值,枚举类型只能列举出个各成员。默认第一个元素对应的整数值为0.

枚举类型比无格式的整数的优势:

使代码易于维护。

代码清晰,允许用描述的名称表示整数值

代码易于键入。

引用类型

引用类型数据存储在堆中,堆是由new分配的内存,一般由程序员分配释放。一般速度比较慢,容易产生内存碎片大多数复杂的C#数据类型,包括我们自己声明的类都是引用类,它们分配在堆中。

该类型的变量不直接存储所包含的值,指向它要存储的值,存储实际数据的引用值的地址。

引用类型有数组,类,委托和接口4中。

装箱和拆箱

值类型和应用类型之间是可以转换的,这种转换的实现,依赖于一种机制:装箱(Boxing)和装箱(unboxing).拆箱和装箱对任何类型的值来说最终都可以看作object类型。

装箱:将一个值类型隐式的转换为Object类型,把值类型的值装箱,也就是创建一个object实例并将值赋给object

Int a=10;

Object obj =a;

拆箱:把Object类型显示的转换成一个值类型。先检验对象实例,将值从实例中复制出来,赋给值类型变量。

Int k=10;

Object obj=k;

Int j =(int)obj;

时间: 2024-10-11 12:13:06

C#之拆箱,装箱的相关文章

拆箱装箱 页面跳转 及内存管理 0905蓝懿教育

拆箱装箱 数组中只能装入对象,而很多时候我们需要把类似Int 或者结构体这种装入 此时我们需要进行拆装 基本思想是 把类似int还有结构体 转换成相对应的对象 然后加入数组 ,导出时 要从对象型变成对应的int或者结构体类 @property NSmutableArray *ages; self.ages=[NSmutableArray  Array]; int x=1; NSnumber *objectnumber=x; [self.ages addobject:objectnumber];

java自动拆箱装箱易导致的两个错误

自J2SE 5.0开始提供的基本数据类型的自动装箱(autoboxing).拆箱(unboxing)功能. 何为自动装箱: 当我们创建一个Integer对象时,却可以这样: Integer i = 100; (注意:不是 int i = 100; ) 实际上,执行上面那句代码的时候,系统为我们执行了:Integer i = new Integer(100); 此即基本数据类型的自动装箱功能. 何为自动拆箱 自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出.如下可实现自动拆箱

WPF中多线程统计拆箱装箱和泛型的执行效率

WPF中多线程统计拆箱装箱和泛型的执行效率,使用的知识点有泛型.多线程.委托,从例子中可以看到使用泛型的效率至少提升2倍 MainWindow.xaml <Window x:Class="Box.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xa

WPF中多线程统计拆箱装箱和泛型的运行效率

WPF中多线程统计拆箱装箱和泛型的执行效率.使用的知识点有泛型.多线程.托付.从样例中能够看到使用泛型的效率至少提升2倍 MainWindow.xaml <Window x:Class="Box.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xa

拆箱装箱

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

java学习笔记——自动拆箱装箱(Autoboxing&amp;Unboxing)

一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类类型的对象却可以携带更多的信息. public class TestInteger01 { public static void main(String[] args) { int a = 10; int b = 20; Integer A = new Integer(a); Integer B =

JAVA高级特性--自动拆箱-装箱,枚举类型

基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10; 相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10; int n=m; 相当于n=m.intValue(); 枚举类型 所有枚举类型都继承了Enum类 枚举值都是public  static final 的  ,也就是常量,因此枚举值应大写 枚举构造器都是私有化的 //当jvm去加载使用枚举类的时候,会预先创建多个枚举类型的对象供外部使用 public stat

关于Java自动拆箱装箱中的缓存问题

1 package cn.zhang.test; 2 /** 3 * 测试自动装箱拆箱 4 * 自动装箱:基本类型自动转为包装类对象 5 * 自动拆箱:包装类对象自动转化为基本数据类型 6 * 7 * 8 * /*缓存问题*/ 9 /*缓存[-128,127]之间的数字,也就是一个byte,实际上是系统在初始的时候创建了一个范围在[-128,127]之间的一个数组 10 * 当我们调用valueOf的时候,首先判断该数字是否在[-128,127]之间,如果在,则在数组中拿出该对象,侧面印证了数组

java拆箱装箱中的一个问题

Integer i1 = 129; Integer i2 = 129; System.out.println(i1 == i2); Integer i3 = 1; Integer i4 = 1; System.out.println(i3 == i4); Integer i5 = new Integer(1); Integer i6 = new Integer(1); System.out.println(i5 == i6); System.out.println(i5.equals(i6));

Java知多少(24)包装类、拆箱和装箱详解

虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单.有效地进行常规数据处理. 这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得