你真的理解编程语言里的数据相等吗

计算机编程语言的抽象,让相等变得更复杂。

不同编程语言的判等

较早的编程语言判断相等一般按数值判断(指针也算数值),后期编程语言增加了更多的判断方法,比如Python的is.

  • C/ObjC/C++数组名判断相等本质是指针判等,与内容无关。
  • C++运算符重载==可以支持内容判断或自定义。
  • Java对基本数据类型(非引用类型)用==和equals方法是等效的,本质都是数值判等,对于引用类型,==代表是否指向同一个对象(本质为判断指针地址); equals方法默认为判断引用,一般会重写为比较内容。
    • 查阅Object/Integer/String源代码equals的实现可知一二。
  • C#和Java类似,对于引用类型:
    • 如果是referenceEqual始终比较引用或地址。
    • Equals和==默认比较地址,一般二者都会重写或重载为比较内容。
      • 特例是string类型==和Equals都是比较内容。
  • Python的is用于比较对象的id是否相同(不同变量的id可能是同一个),==运算符只判断对象内容是否相等,不同的id内容可能相同可能不同。
    • is调用id(a) == id(b)检查,==调用__eq()__ 方法检查。
  • PHP提供==和===两种判等方式,前者是基本的数值判断,后者额外包含类型相同。
  • Swift用==提供为值类型或引用类型数据相等判断,===为引用类型判断同一性(地址相同)。

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关推荐
AI科技星22 分钟前
数术工坊 · 第四卷 橡皮泥江湖(拓扑学)【完整定稿】
c语言·开发语言·汇编·electron·概率论·拓扑学
张忠琳30 分钟前
【Go 1.26.4】Golang Select 深度解析
开发语言·后端·golang
IT 行者2 小时前
GitHub Spec Kit 实战(五):/speckit.tasks 怎么拆——Spec Kit 五部曲收官
java·ai编程·claude
AC赳赳老秦2 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
提笔了无痕2 小时前
如何用Go实现整套RAG流程
开发语言·后端·golang
(Charon)2 小时前
【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】
java·开发语言
Yeats_Liao2 小时前
Feed流系统设计(三):数据模型与存储设计,从表结构到Redis收件箱
java·javascript·redis
JiaHao汤2 小时前
分布式事务方案全景:从理论到 Seata 落地
java·分布式·spring·spring cloud
2601_961875243 小时前
法考考试时间安排及科目|时间表|资料已整理
开发语言·c#·inverted-index·suffix-tree·sstable·r-tree·lsm-tree
AI科技星3 小时前
数术工坊第八卷:算力革命
c语言·开发语言·网络·量子计算·agi