c# - 字节实例和字节数组实例的比较
问题描述
为什么: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 为假?
解决方案
当您比较两个数组时,它比较的是引用(即该特定数组对象的地址/标识),而不是内容。由于您创建了两个不同的数组,它们具有不同的引用,因此它返回false
.
但是,比较bytes是通过比较值来完成的,并且零等于零。
从理论上讲,运行时可以为每次调用返回相同的记忆空数组new Foo[0]
,但这将是一个重大变化,因为您所看到的原因是:它会改变一个可观察的行为。也许是矛盾的,但现在new string(...)
使用零长度确实经常这样做,返回 interned ""
。
推荐阅读
- amazon-web-services - AWS SAM,如何从 api 网关调用运行状态机?
- python - 解析列表列表并就地操作
- azure - 阻止 blob 服务:存在超时不起作用
- c++ - 我可以为类的前向声明省略非公共继承吗?
- python - 嵌套列表循环并希望使每个循环都有索引 0 和 1
- paypal - Paypal 沙箱到真实账户
- javascript - 将值从 URL 链接传递到表单字段
- python-3.x - 为什么 python 包 http.server 只能在本地工作?
- javascript - 无法在网页上上传带有 javascript 代码的文件
- c# - C#/.net:通过 TCP 连接传输许多小块数据