为什么比较字符串0(n)但比较数字0(1)?

Nic*_*key 8 javascript computer-science equality

我知道要比较两个字符串是否相等,解释器必须遍历两个字符串并比较每个字符。

这将使时间复杂度0(n),其中n最短字符串的长度。

但是,比较两个数字是否相等是0(1)

这是为什么?解释器是否不必遍历每个数字以检查是否相等?

Joa*_*uer 10

计算机中的数字通常以固定大小的单位处理。int在任何给定的语言和/或编译器/平台组合中,a 可能是32位或64位,但是永远不会是可变长度的。

因此,比较数字时,您要比较的位数是固定的。建立一个硬件电路一次比较多个位非常容易(即“一个动作”)。

另一方面,字符串具有固有的可变长度,因此您只说“字符串”并不能告诉您必须比较多少位。

但是也例外,因为存在可变长度的数字,通常称为BigIntegerBigDecimal,它的行为与String比较非常相似,因为它可能最终是O(n)来比较两个BigDecimal值是否相等(其中n是BigDecimals 的长度),而不是它们的任何一个数值)。

  • @ smac89“ *但是在比较完成之前,文档对于每个操作数将转换为什么都非常含糊*” [文档非常明确](https://developer.mozilla.org/zh-CN/docs / Web / JavaScript / Equality_comparisons_and_sameness#Loose_equality_using)中如何进行不同类型之间的比较。 (3认同)