using System;
namespace EqualsTest
{
class EqualsTest
{
static void Main(
string[] args)
{
//值类型
int x =
1;
int y =
1;
Console.WriteLine(x == y);
//True
Console.WriteLine(x.Equals(y));
//True
//引用类型
A a =
new A();
B b =
new B();
//Console.WriteLine(a==b);//报错
Console.WriteLine(a.Equals(b));
//False
//字符串(最像值类型的引用类型)
string m =
"1";
string n =
"1";
Console.WriteLine(m==n);
//True
Console.WriteLine(m.Equals(n));
//True
//结构体(最像引用类型的值类型)
T t =
new T();
V v =
new V();
//Console.WriteLine(t == v);//报错
Console.WriteLine(t.Equals(v));
//True
Console.Read();
}
}
class A {
public int X =
1; }
class B {
public int X =
1; }
struct T {
int X; }
struct V {
int X; }
}
总结:
①两个“相同”的对象进行比较,不管是equals()还是==,值类型都返回True,引用类型都返回False。
②上面的①并不完全正确,因为有两个特例:结构体(最像引用类型的值类型);字符串(最像值类型的引用类型)。
③引用类型(除去字符串),以及结构体,根本不能用==去对比,编译就会报错。
转载于:https://www.cnblogs.com/9cct/p/7749358.html