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

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
主站蜘蛛池模板: 乌拉特前旗| 蛟河市| 岑巩县| 浦城县| 临邑县| 治多县| 富裕县| 财经| 罗田县| 察隅县| 河源市| 土默特左旗| 紫金县| 新巴尔虎左旗| 报价| 吴川市| 上思县| 海晏县| 鄢陵县| 民权县| 榆中县| 南投县| 枣庄市| 清远市| 赫章县| 崇左市| 陆丰市| 沛县| 凤凰县| 杭锦旗| 武胜县| 南投市| 双柏县| 运城市| 肇庆市| 梁河县| 黄骅市| 枣庄市| 兴业县| 新民市| 金湖县|