21 GetHashCode Equels ReferenceEquals的比较

 
//GetHashCode方法,一般是获取Hash值,不同的Hash值,一定是不同的两个对象,
//相同的hash值有可能是同一个对象。hash值类似于索引代表其唯一性。
//一般GetHashCode方法不单独使用或者不常使用。讲对象作为hashtable或dictionary的key
//时才会用到,当插入key时,首先会调用 GethashCode方法判断是否存在,如果存在,会在调用
//Equels方法判断这两个对象是否相等。所以一般 GethashCode方法和Equels方法配合使用
// 重写Equels方法一般也要重写GetHashCode方法
// ReferenceEquals 比较两个对象的引用
string sq = "123";
string sw = "123";
// 对于String 类型 因为重写了Equels方法,所以实际比较的是两个字符串的值,所以以下返回True
Console.WriteLine(sq.Equals(sw));
Console.WriteLine(sq == sw);

Student student = new Student() { Name = "zheng", Age = 12 };
Student student1 = new Student() { Name = "zheng", Age = 12 };
Console.WriteLine(String.ReferenceEquals(student, student));
student.Name = "111";
Console.WriteLine(String.ReferenceEquals(student, student));
Hashtable hashtable = new Hashtable();

hashtable.Add(student, "11");
hashtable.Add(student1, "11");

  

 public class Student
    {

        public String Name { get; set; }

        public int Age { get; set; }
        public override bool Equals(object obj)
        {
            Student student = obj as Student;
            return this.Name == student.Name && this.Age == student.Age;
        }
        public override int GetHashCode()
        {
            
            return this.Age;
        }
    }

  

posted @ 2019-12-24 09:34  谁说程序猿很猥琐  阅读(68)  评论(0编辑  收藏  举报