黑马程序员技术交流社区
标题:
下面这段代码输出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