- Learn Kotlin Programming(Second Edition)
- Stephen Samuel Stefan Bocutiu
- 317字
- 2021-06-24 14:13:28
Referential equality and structural equality
When working with a language that supports object-oriented programming (OOP), there are two concepts of equality. The first is when two separate references point to the exact same instance in memory. The second is when two objects are separate instances in memory but have the same value. What the same value means is specified by the developer of the class. For example, for two square instances to be the same, we might just require they have the same length and width regardless of coordinates.
The former is called referential equality. To test whether two references point to the same instance, we use the === operator (triple equals) or !== for negation:
val a = File("/mobydick.doc") val b = File("/mobydick.doc") val sameRef = a === b
The value of the test a === b is false because, although a and b reference the same file on disk, they are two distinct instances of the File object.
The latter is called structural equality. To test whether two objects have the same value, we use the == operator or != for negation. These function calls are translated into the use of the equals function that all classes must define. Note that this differs from how the == operator is used in Java—in Java, the == operator is for referential equality and is usually avoided:
val a = File("/mobydick.doc") val b = File("/mobydick.doc") val structural = a == b
Note that, in the double equals check, the value was true. This is because the File object defines equality to be the value of the path. It is up to the creator of a class to determine what structural equality means for that class.
- C語言程序設計習題解析與上機指導(第4版)
- Learning Apex Programming
- Java面向對象思想與程序設計
- Microsoft Dynamics 365 Extensions Cookbook
- R的極客理想:工具篇
- Learning Network Forensics
- PhoneGap:Beginner's Guide(Third Edition)
- H5頁面設計:Mugeda版(微課版)
- Troubleshooting Citrix XenApp?
- Java7程序設計入門經典
- 零基礎看圖學ScratchJr:少兒趣味編程(全彩大字版)
- Appcelerator Titanium:Patterns and Best Practices
- H5匠人手冊:霸屏H5實戰解密
- Mastering Machine Learning with scikit-learn
- Learn C Programming