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

首先

值不相等 == 和 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值