说明由于 == 和equal 和ReferenceEquals 都是比较是否相等的,针对不同的类型比较的结果也不一样
基本数据类型比较的比较
Console.WriteLine("值类型比较");
int a = 5;
int b = 5;
double c = 5;
// == 会进行类型转换 a== c 也成立
if (a == b)
{
Console.WriteLine("a == b ");
}
if (a.Equals(b))
{
Console.WriteLine("a.Equal(b)");
}
//不可思议 object.Equals(object,object) 两个参数是object
//传入 int 装箱后竟然成立,通过翻阅资料发现 object.Equals比较的是字节序列
if (object.Equals(a, b))
{
Console.WriteLine("object.Equals(a,b)");
}
///同样成立
object oA = 5;
object oB = 5;
if (object.Equals(oA, oB))
{
Console.WriteLine("object.Equals(oA, oB)");
}
///不成立
if (object.ReferenceEquals(oA, oB))
{
Console.WriteLine("object.ReferenceEquals(oA, oB)");
}
myInt mInt,mInt2;
mInt.val = 5;
mInt2.val = 5;
if (object.Equals(mInt, mInt2))
{
Console.WriteLine("object.Equals(mInt, mInt2)");
}
Console.WriteLine("\r\n");
Console.WriteLine("字符串类型比较");
字符串比较
string va1 = string.Empty;
string va2 = "hello world";
StringBuilder valBuider = new StringBuilder("hello world");
va1 = valBuider.ToString();
if (va1 == va2)
{
Console.WriteLine("val == va2");
}
if (va1.Equals(va2))
{
Console.WriteLine("va1.Equals(va2)");
}
if (object.ReferenceEquals(va1, va2))
{
Console.WriteLine("object.ReferenceEquals(va1, va2)");
}
Console.WriteLine("\r\n");
Console.WriteLine("自定义类型比较");
自定义类比较
BaseCls objA = new BaseCls();
BaseCls objB = new BaseCls();
///两个对象不成立
if (objA == objB)
{
Console.WriteLine("objA == objB");
}
///不成立
if (objA.Equals(objB))
{
Console.WriteLine("objA.Equals(objB)");
}
///不成立
if (object.ReferenceEquals(objA, objB))
{
Console.WriteLine("object.ReferenceEquals(objA, objB)");
}
Console.ReadKey();
}
class BaseCls
{
public BaseCls()
{
val = 10;
}
public int val;
}
public struct myInt:IEquatable<int>
{
public int val;
public bool Equals(int other)
{
if (val == other)
{
return true;
}
else
{
return false;
}
}
}