You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何new byte()相等比较返回true而new byte[0]比较返回false

两个表达式结果差异的根本原因

首先给出可复现问题的代码片段:

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

两类表达式的判断逻辑完全不同,差异本质来自.NET的值类型、引用类型的默认==运算符规则不同:

1. new byte() == new byte()返回true的原因

  • byte属于.NET中的值类型,值类型的默认==运算符执行按值比较逻辑,只校验两个实例的存储值是否相等,不会关联内存地址判断。
  • new byte()会创建一个值为默认值0的byte值类型实例,两个实例的存储值都是0,比较结果自然为true。
    补充:值类型实例默认分配在栈上,不存在堆内存引用的概念,所有未自定义运算符重载的值类型,==默认都走值比较逻辑。

2. new byte[0] == new byte[0]返回false的原因

  • 所有数组类型都属于.NET中的引用类型,引用类型的默认==运算符执行引用同一性比较逻辑,只会校验两个实例是否指向托管堆上的同一块内存地址,不会校验实例内部存储的内容。
  • 每执行一次new byte[0]都会在托管堆上分配一块新的内存空间存储空数组实例,两次new操作得到的是两个完全独立的实例,内存地址不同,因此引用比较结果为false。
    补充:如果你需要比较两个数组的内容是否一致,可以使用Enumerable.SequenceEqual()方法,例如new byte[0].SequenceEqual(new byte[0])会返回true。

内容的提问来源于stack exchange,提问作者Polina Ivanchik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:24:02