在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

几种语言的==、===和is比较

请问一下,几种语言的==、===和is比较
最新回答
白色季节

2025-03-01 03:16:37

在许多语言中,使用 == 来判断两个值是否相等。有些语言中还有 is ,但是意义各不相同,本文着重于介绍各语言中这些概念。

Python 中的 == 来比较两个值是否相等。例如:

数值上的相等是显而易见的,那么对于对象呢?

先以 Python 自带的 list 对象为例:

Python 将会对 list 中的每个元素进行比较。对于类的实例,实际上是调用 __eq__() 方法来进行比较的。

Python 中的 is 则表示是否是同一对象:

对于简单的数字:

但是对于对象:

Python 中还有 isinstance() 函数和 type() 函数,用以确定对象的类别。

区别:

如果要判断两个类型是否相同推荐使用 isinstance()。

下面引用菜鸟教程的例子:

在上文的 Python 中, == 用来判断值是否相等, is 用来判断是否是同一个对象。而在 Java 中, == 同时拥有以上两种含义。

== 对于基本数据类型,是比较值;对于引用数据类型,是比较是否是同一对象,或者说是比较 堆内存地址

对于基本类型,自然可以直接 == 。(但是 Java 是区分 int 和 Integer,double 和 Double 等的,要注意!)

对于类的实例,则比较的是否是同一对象。

默认情况下,比较是否是同一对象,将上例中的 instanceA == instanceB 改为 instanceA.equals(instanceB) ,仍然输出 false 。

因此,我们需要重写(Override) equals() 方法,来实现自定义的比较:

不过上文这种重写并不优雅,工程中请勿这样使用。

Java 中使用 instanceof 来比较一个对象是否是一个类的实例。

DemoClass 类定义如前文,不赘述。

我们把 instanceA 的静态类型从 DemoClass 改为 Object ,众所周知, DemoClass 继承于 Object 。

但是这样输出的仍然是 true 。

首先是对于简单的数字,这种情况下,各语言的 == 都会是比较值的。

Kotlin 的双等于号相当于 Java 的 equals ,这在比较两个字符串是否内容相同时很方便。

在没有重写 equals 方法的情况:

似乎是 Kotlin 会自动生成一个 euqals 方法,所以这里的 instanceA == instanceB 为 true 。

重写了之后,就更加明了了。

Kotlin 中有三等号 === 来判断是否是同一对象。

这里可以看出, instanceA == instanceB 为 false ,因为二者并非同一对象。

Kotlin 中的 is 类似于 Python 中的 isinstance 、Java 中的 instanceof :