字节实例和字节数组实例的比较
为什么: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
为什么会出现 result1 为真而 result2 为假的情况?
回答
当您比较两个数组时,它比较引用(即该特定数组对象的地址/身份),而不是内容。由于您创建了两个不同的数组,它们具有不同的引用,因此它返回false.
但是,比较bytes是通过比较值来完成的,零等于零。
理论上,运行时可以为每次new Foo[0]调用返回相同的记忆空数组,但由于您看到的原因,这将是一个重大变化:它会改变可观察的行为。也许自相矛盾,但现在new string(...)使用零长度确实经常这样做,返回实习生"".