官术网_书友最值得收藏!

When are two values or objects equal or identical?

Whether two values are equal or not can be decided by the == operator, for example, 5 == 5 and 5 == 5.0 are both true. Equivalent to this operator is the isequal() function:

isequal(5, 5)   #> true 
isequal(5, 5.0) #> true 

Both the preceding statements return true, because objects such as numbers are immutable and they are compared at the bits level.

To see whether the two objects x and y are identical, they must be compared with the === operator. The result is a Bool value, true or false: x === y -> Bool, for example:

5 === 5 #> true 
5 === 5.0 #> false

For objects that are more complex, such as strings, arrays, or objects that are constructed from composite types, the addresses in the memory are compared to check whether they point to the same memory location. For immutable object such as struct, this gets optimized so that instances with the same value point to the same object:

struct Vector3D
x::Float64
y::Float64
z::Float64
end

q = Vector3D(4.0, 3.14, 2.71)
r = Vector3D(4.0, 3.14, 2.71)
isequal(q, r) #> true
q === r #> true

However, if objects are mutable, they are different objects even if they have the same value, as follows:

mutable struct MVector3D
x::Float64
y::Float64
z::Float64
end

q = MVector3D(4.0, 3.14, 2.71)
r = MVector3D(4.0, 3.14, 2.71)
isequal(q, r) #> false
q === r #> false
主站蜘蛛池模板: 湘西| 襄汾县| 台中县| 潢川县| 湖南省| 禹城市| 嵊泗县| 时尚| 武定县| 贡觉县| 舞钢市| 宝清县| 夏河县| 宜都市| 石屏县| 三江| 浮梁县| 潼南县| 泽库县| 军事| 东阳市| 太康县| 台安县| 祁东县| 饶平县| 隆子县| 专栏| 共和县| 乐山市| 柏乡县| 陆良县| 黔东| 白城市| 酉阳| 铜川市| 察雅县| 犍为县| 肥乡县| 宣武区| 祥云县| 千阳县|