关于==和equal的区别(C#Java)

it2022-05-08  7

首先

值不相等 == 和 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了


最新回复(0)