黑马程序员技术交流社区

标题: 下面这段代码输出not equal为什么? [打印本页]

作者: 大牙到潍坊    时间: 2013-11-30 13:49
标题: 下面这段代码输出not equal为什么?
本帖最后由 大牙到潍坊 于 2013-12-1 21:45 编辑

int i=10;
     int j=10;
     if (Object.ReferenceEquals(i,j))
          Console.WriteLine("Equal");
     else
          Console.WriteLine("Not Equal");
作者: yuanlianxi03    时间: 2013-11-30 15:02
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,这样是比较他们的值



作者: u010209195    时间: 2013-11-30 15:05
本帖最后由 u010209195 于 2013-11-30 16:01 编辑

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

作者: 刘吉烨    时间: 2013-11-30 15:05
ReferenceEqual  比较参数的引用对象是否相同。对于值类型,就算值相等,但传给函数时,也需要装箱成不同的对象,因此无论如何,此函数对于值类型参数总是返回False。

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

ReferenceEqual和==,equal之间是有区别的,这个可以上网搜一下,稍微了解一下,加油:lol
作者: 许杰    时间: 2013-12-1 15:28
ReferenceEquals 是确定两个对象是否是相同的实例。i 和j 都是int类型的数值,而ReferenceEquals需要的是指定的 Object 实例,由此会生成两个不同的对象
作者: 不明觉厉    时间: 2013-12-1 16:05
因为ReferenceEquals需要的是Object类型参数,而你定义的两个int类型变量,是值类型,所以会发生装箱,生成两个引用类型,两个引用类型实例是两个不同对象,在内存中是不同的,所以输出not equal
作者: V_John    时间: 2013-12-1 16:12
如果问题得到解决,请修改为已解决,这样才能打分哦!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2