首先
值不相等 == 和 equal 必然为false 这个不需要讨论
其次
equal 和 “==” 的本身逻辑就是判断当前object和你指向的object是否一致 因此底层逻辑上来说 就是对地址的判断
然后
对于值类型来说 值类型互相判断
值相等 必然为true
对于引用类型来说
先下定义:只判断堆内存地址是否一致
在C#中
string a = “111”;
string b = “111”;
return true;
这是由于我们在调用string的判断时 string对C#的 == 进行了重写 因此你会发现你在写代码时 尽管两个string的地址不一样 但是得出的结果依然为true
因此我们继承string 将string的 == 重写 重写之后的判断:
string a = “111”;
string b = “111”;
return true;
这个时候你会发现 ab的返回值 依然是true 这是什么情况?难道恒等于true??定义错误了??
这是因为C#有 “池” 的概念 当我们去申请一个内存的时候 计算机会去这个 “池” 里面寻找是不是有相同值的字符串 如果有 则让当前的字符串指向该池中的字符串 所以这个时候 你去判断a == b 不是因为他们的值相等 导致的true 而是因为他们的地址是一致的 所以返回值才会是true
而我们怎么样才会返回false呢?这样写的话:
string a = new string(“111”);
string b = new string(“111”);
return false;
这时判断 a == b 就是false了