- 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.
- Web應用系統開發實踐(C#)
- Getting Started with Gulp(Second Edition)
- Objective-C Memory Management Essentials
- Microsoft Exchange Server PowerShell Cookbook(Third Edition)
- Arduino by Example
- Getting Started with ResearchKit
- NativeScript for Angular Mobile Development
- Learning Firefox OS Application Development
- 青少年信息學競賽
- 從零開始學C語言
- jQuery炫酷應用實例集錦
- Python語言實用教程
- Android驅動開發權威指南
- PHP編程基礎與實踐教程
- Python全棧開發:基礎入門