知识卡片
相等与同一是两个不同的问题
内容
相等(用==判断)问的是”两个实例的值是否一样”;同一(用===判断,仅适用于引用类型)问的是”两个变量是否指向内存中同一个实例”。两者可能分离:两个引用类型实例可能值完全相等但分处内存中两个不同位置(相等但不同一);反过来,如果两个变量指向同一个实例,它们的值必然相等(同一必然相等,但相等未必同一)。值类型天生没有”同一性”这个概念——Int类型的两个变量即使值相同也无法用===比较,因为值语义下根本不存在”共享的底层实例”这回事。这组区分呼应了[[值语义与引用语义的本质区别]]:判断两个变量”是不是一回事”,答案取决于类型本身是值类型还是引用类型,不能一概而论。
参考来源
《Swift编程权威指南》第18章《值类型与引用类型》