A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大牙到潍坊 中级黑马   /  2013-11-30 13:49  /  1369 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 大牙到潍坊 于 2013-12-1 21:45 编辑

int i=10;
     int j=10;
     if (Object.ReferenceEquals(i,j))
          Console.WriteLine("Equal");
     else
          Console.WriteLine("Not Equal");

7 个回复

倒序浏览
public static bool ReferenceEquals(
        Object objA,
        Object objB
)
参数
objA
类型:System.Object

要比较的第一个 Object。

objB
类型:System..::.Object

要比较的第二个 Object。

返回值
类型:System.Boolean

如果 objA 是与 objB 相同的实例,或者如果二者都为空引用,则为 true;否则为 false。


int i 和 int j 都是值类型,而ReferenceEquals需要的是Object类型,这会对 i 和 j 进行装箱操作,生成两个不同的对象,所以它们的引用不是指向同一个地址

如果要是值类型的话 ,直接用i==j,这样是比较他们的值


评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
本帖最后由 u010209195 于 2013-11-30 16:01 编辑

因为你定义的I,j都是值类型,
ReferenceEqual比较参数的引用对象是否相同。对于值类型,就算值相等,但传给函数时,也需要装箱成不同的对象,因此无论如何,此函数对于值类型参数总是返回False。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
ReferenceEqual  比较参数的引用对象是否相同。对于值类型,就算值相等,但传给函数时,也需要装箱成不同的对象,因此无论如何,此函数对于值类型参数总是返回False。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
u010209195 发表于 2013-11-30 15:05
因为你定义的I,j都是值类型,
ReferenceEqual比较参数的引用对象是否相同。对于值类型,就算值相等,但传 ...

ReferenceEqual和==,equal之间是有区别的,这个可以上网搜一下,稍微了解一下,加油:lol
回复 使用道具 举报
ReferenceEquals 是确定两个对象是否是相同的实例。i 和j 都是int类型的数值,而ReferenceEquals需要的是指定的 Object 实例,由此会生成两个不同的对象

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
因为ReferenceEquals需要的是Object类型参数,而你定义的两个int类型变量,是值类型,所以会发生装箱,生成两个引用类型,两个引用类型实例是两个不同对象,在内存中是不同的,所以输出not equal

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
V_John 中级黑马 2013-12-1 16:12:38
8#
如果问题得到解决,请修改为已解决,这样才能打分哦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马