C#高级(七)类型强制转换,拆箱,装箱

一、装箱和拆箱

装箱就是 将值类型转换为引用类型。拆箱就是 将引用类型转换为值类型。

比如我们非常常用的 .ToString() 方法,就是典型的一个装箱的过程。

再如下面的例子

int i=10;

object y=(object) i ; //这就是装箱

int x=(int)y; //这是拆箱。

二、对象的相等比较

在C#中,有四种比较相等的方法。

1、ReferenceEquals() 该方法是一个静态方法,用来判断两个引用是否指向同一个实例。也就是是否 指向同一个内存地址,如果是,则返回true ,否则返回 false。

2、虚拟的 Equals() 方法。因为是虚拟的方法,所以可以重写。这样它既可以用来比较对象,也可以 比较值。

3、静态的 Equals() 方法,这与虚拟的Equals()方法作用相同,只是带有两个参数,并对其进行比较 。这个方法可以处理两个对象中有一个是null的情况,当有一个是null的时候,就会抛出异常。

4、比较运算符 == 我们最好把这种比较看做是严格值比较和严格引用比较之间的中间选项。但注意 ,通过这样的方式比较字符串的时候,而不是引用。

时间: 2024-09-13 16:07:22

C#高级(七)类型强制转换,拆箱,装箱的相关文章

java虚拟机在进行类型强制转换的时候究竟做了什么

问题描述 java虚拟机在进行类型强制转换的时候究竟做了什么 打个比方 A a = new A(): B b = (B)a: 这两行代码究竟是怎样在Jvm中实现的? 解决方案 子类继承父类之后,在new子类的时候,实际上父类也被构造出来了,因此子类实际上包含着父类的完整信息,也就因此可以完成向上转型,. 至于具体怎么实现的,我查了一下好像是堆分配的过程,贴两个链接,不误导了.http://blog.csdn.net/anjayxc/article/details/6063210http://ww

类中的内存分配和指针类型强制转换问题

问题描述 类中的内存分配和指针类型强制转换问题 问题描述: template //element type class list { private: EleT data;//数据本身,即是需要的信息 list* prio;//the pointer of prior element list* next;//the pointer of next element list* last;//the last pointer of list int len;//the length of list

指针-数组名进行类型强制转换的问题

问题描述 数组名进行类型强制转换的问题 int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x, %x/n", ptr1[-1], *ptr2); return 0; } 为什么ptr2指向a[0]的第二个字节? 个人理解是数组名a是指向a[0]的指针,强制转换为int型变量,再加1,就相当于将原来所存放a[0]的地址当作

C++中Operator类型强制转换成员函数解析_C 语言

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2

C语言中自动隐式转换与类型强制转换实例分析_C 语言

本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

myeclipse6.5不支持自动拆箱装箱的问题

问题描述 myeclipse6.5不支持自动拆箱装箱的问题 我用的myeclipse6.5,1.5的虚拟机,1.5的编译器,为啥不支持拆箱装箱. 解决方案 升级吧,到1.6 MyEclipse10 就好了... 解决方案二: 看下是否代码的问题或者jdk配置的是否正确,jdk1.5开始是支持拆箱装箱的,或者升级下jdk的版本看看. 解决方案三: 编译器太老了,换成jdk1.7,myeclipse 10 就可以

JAVA 类型强制转换

问题描述 inti=1:i=i*int(0.1);这是程序的一部分关于强制转换的到底哪出问题了为什么这一点就是编译不过呢!!我这样改还是不行inti=1;i=int(i*0.1)还是通不过那位高手帮忙解释下啊!谢谢! 解决方案 解决方案二:inti=1;i=(int)(i*(0.1));解决方案三:floatb=0.1f;intc=(int)b;System.out.println((i*c)); 解决方案四:恩,是这么回事解决方案五:这是关于"隐式转换"和"强制转换&quo

python类型强制转换long to int的代码_python

python2.4版本以后,如果int的值超出范围不会溢出,而是内部转换为long,在网上没有找到从long型强制转换成int的代码,这里所说的int取值范围是和java里一致,即用四个字节表示.自己写了一个函数,勉强可以用,供大家参考. 复制代码 代码如下: import sysdef LongToInt(value):    assert isinstance(value, (int, long))    return int(value & sys.maxint) 经过测试,在32位和64

克隆对象提示不能将A类型强制转换成B类

问题描述 [Serializable]publicpartialclassA{}publicclassB():A{publicB():base(){}}Aa=newA()....Bb=a.CreateClone<B>();publicstaticTCreateClone<T>(thisAa){using(StreamobjectStream=newMemoryStream()){IFormatterformatter=newBinaryFormatter();formatter.S