首页 > 解决方案 > 字节实例和字节数组实例的比较

问题描述

为什么:new byte() == new byte() 返回 true,但 new byte[0] == new byte[0] 返回 false?

这是代码示例:

var result1 = new byte() == new byte(); // true
var result2 = new byte[0] == new byte[0]; // false

为什么结果 1 为真而结果 2 为假?

标签: c#.net

解决方案


当您比较两个数组时,它比较的是引用(即该特定数组对象的地址/标识),而不是内容。由于您创建了两个不同的数组,它们具有不同的引用,因此它返回false.

但是,比较bytes是通过比较值来完成的,并且零等于零。

从理论上讲,运行时可以为每次调用返回相同的记忆空数组new Foo[0],但这将是一个重大变化,因为您所看到的原因是:它会改变一个可观察的行为。也许是矛盾的,但现在new string(...)使用零长度确实经常这样做,返回 interned ""


推荐阅读