为什么这段代码返回true:
new Byte() == new Byte() // returns true
Run Code Online (Sandbox Code Playgroud)
但是这段代码返回false:
new Byte[0] == new Byte[0] // returns false
Run Code Online (Sandbox Code Playgroud)
p.s*_*w.g 43
字节是.NET 中的值类型,这意味着==当且仅当两个字节具有相同值时,运算符才返回true.这也称为价值平等.
但是数组是.NET 中的引用类型,这意味着==当且仅当它们在内存中引用相同的数组实例时,运算符才返回true.这也称为引用相等或身份.
请注意,==可以为参考和值类型重载运算符.System.String例如,是一个引用类型,但==字符串的运算符按顺序比较数组中的每个字符.请参阅重载等于()和运算符指南==(C#编程指南).
如果要测试数组是否包含完全相同的值(按顺序),则应考虑使用Enumerable.SequenceEqual而不是==.
Zah*_*med 10
比较引用实际上是比较指针地址,这是不同的,这是返回false的原因和值地址无关紧要比较值.
编译器尝试将值类型存储在寄存器中,但由于寄存器数量有限,堆栈中的进一步存储会发生值[参考],而引用类型在堆栈中,但值保存堆中的内存地址.
这里的比较比较了堆栈中存在的值,在第一种情况下,两者都是相同的,而在第二种情况下,它是不同的堆的地址.
| 归档时间: |
|
| 查看次数: |
3283 次 |
| 最近记录: |